bas*_*bas 2 c# unit-testing moq
是否有可能在Moq中定义严格的行为?
我想调用ReadLine两次,但为两个不同的调用定义不同的返回值.请参阅下面的代码示例:
Moq示例(失败)
[Test]
public void ExampleDifferentResultOnReadLine()
{
var textReader = new Mock<TextReader>(MockBehavior.Strict);
textReader.Setup(reader => reader.ReadLine()).Returns("Bla");
textReader.Setup(reader => reader.ReadLine()).Returns("Bla1");
var str = textReader.Object.ReadLine();
var str1 = textReader.Object.ReadLine();
Assert.AreEqual("Bla", str); // Fails: mocks returns Bla1
Assert.AreEqual("Bla1", str1);
}
Run Code Online (Sandbox Code Playgroud)
犀牛嘲笑的例子(成功)
public void ExampleDifferentResultOnReadLine()
{
var textReader = MockRepository.GenerateStrictMock<TextReader>();
// var textReader = new Mock<TextReader>(MockBehavior.Strict);
textReader.Expect(reader => reader.ReadLine()).Return("Bla");
textReader.Expect(reader => reader.ReadLine()).Return("Bla1");
var str = textReader.ReadLine();
var str1 = textReader.ReadLine();
Assert.AreEqual("Bla", str);
Assert.AreEqual("Bla1", str1);
}
Run Code Online (Sandbox Code Playgroud)
Moq也是如此吗?
模拟构造函数接受MockBehavior枚举值:
var textReader = new Mock<TextReader>(MockBehavior.Strict);
Run Code Online (Sandbox Code Playgroud)
BTW正确的代码来测试调用顺序(因为RhinoMocks增加了期望值,而Moq只使用你提供的最后一个值):
var textReader = new Mock<TextReader>();
textReader.SetupSequence(r => r.ReadLine())
.Returns("Bla")
.Returns("Bla1");
var str = textReader.Object.ReadLine();
var str1 = textReader.Object.ReadLine();
Assert.AreEqual("Bla", str);
Assert.AreEqual("Bla1", str1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
553 次 |
| 最近记录: |