如何使用Moles验证交互测试。例如,使用rhino mock编写以下测试。任何人都可以告诉我,我怎么能用鼹鼠做同样的事情?有没有像鼹鼠验证的东西?
[Test]
public void MyTest()
{
MockRepository mocks = new MockRepository();
ILogger mockLogger = mocks.StrictMock<ILogger>();
using(mocks.Record())
{
mockLogger .Log("this is my error");
}
MyClass mc = new MyClass (mockLogger);
mc.MyFunc("abcd");
mocks.Verify(mockLogger);
}
class MyClass
{
private ILogger logger;
public MyClass(ILogger logger)
{ this.logger = logger; }
public void MyFunc(string str)
{
logger.log("this is my error");
}
}
我真的很感谢你的帮助。
答案 0 :(得分:0)
就个人而言,我使用Moq作为内部依赖,使用Moles作为外部因素(以及其他人强加给我的令人不快的静态内容),所以我可能不会给你最好的方式,但这是一种方式:
[TestMethod, Owner("ebd"), TestCategory("Proven"), TestCategory("Unit")]
public void MyTest()
{
var myCalled = false;
var myLogger = new SILogger();
myLogger.LogString = (s) => myCalled = true;
var myClass = new MyClass(myLogger);
myClass.MyFunc("abcd");
Assert.IsTrue(myCalled);
}
这里的关键想法是“SILogger”,它是ILogger的存根。然后为它的“LogString”设置实例行为(它对应于你的log(字符串)方法。你将它设置为回调你的局部变量并将其设置为true。然后你调用应该调用日志的方法,并断言你的当地现在是真的。
同样,我通常会使用Moq并使用myStub.Verify()来实现此目的,因此有可能使用我不知道的痣来实现这一点。就个人而言,我认为Moles更适合“嘲笑不可嘲讽”,我更喜欢Moq(用于我自己的接口和类)和Moq(用于框架和外部性,如File I / O,GUI,Db连接等)的组合。 )。