如何解决被测函数“foo”多次调用外部函数“bar(baz)”=>如何针对每次调用专门修改“baz”的返回值?
class FooClass
{
IBar _bar;
Foo(IBar bar)
{
_bar = bar;
}
void foo()
{
byte[] someBytes;
someBytes = _bar.ReadBytes();
if (someBytes != Expectation1)
{
throw new Exception("Byte stream doesn't match expectations");
}
someBytes = _bar.ReadBytes();
if (someBytes != Expectation2)
{
throw new Exception("Byte stream doesn't match expectations");
}
...
}
}
“_bar.ReadBytes”将读取一些数据,期望在每次“ReadBytes”调用后在 foo 中评估特定的字节流。
现在,在单元测试中调用“foo”时,如何以特定方式影响“ReadBytes”每次的返回值?如何设置模拟?
所以为了测试,我需要做一些像......
public class FooClasstests
{
[Fact]
public void Test_Foo()
{
Mock<IBar> mockBar = new Mock<IBar>();
mockComInterface.Setup(mock => mock.ReadBytes()).Returns(new byte[] {}); // returns empty byte array
FooClass fooObject = new FooClass();
fooObject.foo();
Assert.something...
}
}
解决方法
看起来 SetupSequence
正是您要找的
//...
Mock<IBar> mockBar = new Mock<IBar>();
mockBar.SetupSequence(mock => mock.ReadBytes())
.Returns(expectation1ByteArray) // will be returned on 1st invocation
.Returns(expectation2ByteArray); // will be returned on 2nd invocation
FooClass fooObject = new FooClass(mockBar.Object);
//...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。