носорог издевается над вызовом

У меня есть метод, который я хочу проверить, попадает в базу данных. Из того, что я прочитал, это прекрасная возможность использовать макет. Однако проблема, с которой я столкнулся, заключается в том, что я передаю объекту строку, а затем он создает объект и попадает в базу данных этим объектом, т.е.

public void test(string t)
{
   Test t1 = new Test(t);
   db.Save(t1);
}

Тогда в тесте у меня есть:

using(mockery.Record)
{
   Expect.Call(db.Save( ??? ))
}

Проблема в том, чего я здесь ожидаю? Звонок:

Expect.call(db.Save(new Test(t))

не работает.

Поскольку я новичок в насмешках, это может быть простой вопрос, но любая помощь будет очень признательна.

Благодарность


person smauel    schedule 25.01.2010    source источник
comment
кстати, я издеваюсь над ITest = mockery.StrictMock ‹ITest› (); У меня есть другие макеты для успешной работы, только не этот   -  person smauel    schedule 25.01.2010


Ответы (1)


Очень часто вы передаете фактический экземпляр, который ожидаете позже. Например:

public void test(string t)
{
    Test t1 = new Test(t);
    using(mockery.Record)
    {
       Expect.Call(db.Save(t1));
    }
    using(mockery.Playback()
    {       
        db.Save(t1);
    }
    mockery.VerifyAll();
}

Но это, возможно, ограничение. Затем вы можете фактически определить критерии, которые должен выполнять аргумент. Например:

using(mockery.Record)
{
   Test instanceToCompare = new Test(t);    
   Expect.Call(db.Save(Arg<Test>.Is.Equal(instanceToCompare)));
}

Или другой пример:

using(mockery.Record)
{
   Expect.Call(db.Save(Arg<Test>.Matches(t=>t.Name.Length.Equals("Test"))));        
}
person Gamlor    schedule 25.01.2010