犀牛嘲笑嘲笑一个电话

时间:2010-01-25 16:43:41

标签: mocking rhino-mocks

我有一个方法,我想测试哪个命中数据库。从我所看到的,这是一个使用模拟的完美机会。然而,我面临的问题是我将对象传递给一个字符串,然后它创建一个对象并使用该对象命中数据库,即

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))

不起作用。

由于我是嘲笑的新手,这可能是一个简单的问题,但任何帮助都将不胜感激。

感谢

1 个答案:

答案 0 :(得分:0)

通常你会传递你以后期望的实际实例。例如:

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"))));        
}