作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
恕我直言,Rhino Mocks 在使用 AssertWasCalled 时会产生一条不清楚的诊断消息,以验证是否已使用特定参数调用方法。
例子:
interface ISomeInterface
{
void Write(string s);
}
[TestFixture]
public class SomeTests
{
[Test]
public void WriteShouldBeCalledWithCorrectArguments()
{
// Arrange
var mock = MockRepository.GenerateMock<ISomeInterface>();
var sut = new SomeClass(mock);
// Act
sut.DoSomething();
// Assert
mock.AssertWasCalled(x => x.Write(Arg<string>.Is.Equal("hello")));
}
}
现在,如果测试失败并显示此消息...
Rhino.Mocks.Exceptions.ExpectationViolationException : ISomeInterface.Write(等于你好);预期 #1,实际 #0。
...你不知道它是否失败了,因为
一个。 “写入”永远不会被调用 - 或 -
B. 'Write' 实际上被调用了,但是参数不正确
如果 B 是失败的原因,那么如果消息是这样的,那就更清楚了:
Rhino.Mocks.Exceptions.ExpectationViolationException : ISomeInterface.Write(string arg): 调用方法但参数不正确:预期:你好,实际:再见
我可以自己解决这个缺点(通过以某种方式为 Rhino 编写自定义匹配器)还是我只需要为此编写一个手动模拟?
最佳答案
我通过使用 Rhino 提供的“匹配”语法找到了一个简单的解决方案:
[Test]
public void WriteShouldBeCalledWithCorrectArguments()
{
// Arrange
var mock = MockRepository.GenerateMock<ISomeInterface>();
var sut = new SomeClass(mock);
// Act
sut.DoSomething();
// Assert
mock.AssertWasCalled(x => x.Write(Arg<string>.Matches(s => Equal(s, "hello"))));
}
private static bool Equal(string s1, string s2)
{
Assert.That(s1, Is.EqualTo(s2), "Unexpected argument");
return true;
}
当然,它有点笨拙,但它完成了工作。如果有更好的方法,请告诉我。
关于c# - Rhino 模拟 - AssertWasCalled : How to improve unclear diagnostic message when incorrect arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4599177/
我是一名优秀的程序员,十分优秀!