gpt4 book ai didi

c# - Rhino 模拟 - AssertWasCalled : How to improve unclear diagnostic message when incorrect arguments

转载 作者:可可西里 更新时间:2023-11-01 08:45:17 28 4
gpt4 key购买 nike

恕我直言,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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com