作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在模拟我们用于某些企业库调用的包装器。世界上一切都很好,我的测试通过了,实际代码工作了!
但是我随后扩展了功能,并验证了所有测试仍然通过。宾果 - 他们做到了。然而他们并没有在现实世界中,因为有一个期望
InitialiseDBCommand(string, commandtype)
之前会调用
AddCmdParameter(string, dbtype, object)
所以像个好 child 一样,我要做的第一件事就是编写一个测试来展示这种行为并期望抛出异常。
我需要的是设置 AddCmmParater 以在未使用任何字符串调用 InitialDBCommand 时抛出异常。
我想我可以通过回调来做到这一点,但感觉应该有一个方法调用序列(而不是方法返回序列)。
有点像
iDataAccessHelper.Setup(s=>s.AddCmdOutputParameter(It.IsAny<string>(),
It.IsAny<DbType>(),
It.IsAny<int>()))
.When(w=>w.InitialiseDBCommand(etc etc)
.Throws<NullReferenceException>()
有什么建议吗?
最佳答案
好吧,如果您只是想测试是否以正确的顺序调用了 2 个方法,一种方法是添加一个计数器,每次调用其中一个方法时该计数器都会递增,然后检查它是否是正确的数字. Here是描述它的一个答案。以下是我为您的场景编写的方式:
[Test]
public void TestingCallOrder() {
int counter = 0;
var mockDataAccessStuff = new Mock<IDataAccessStuff>();
mockDataAccessStuff.Setup(x => x.AddCmdParameter(It.IsAny<string>())).Callback(() => {
Assert.AreEqual(counter, 0);
counter++;
});
mockDataAccessStuff.Setup(x => x.InitialiseDbCommand(It.IsAny<string>())).Callback(() => {
Assert.AreEqual(counter, 1);
counter++;
});
// more of the same
var myClass = new ClassThatImTesting(mockDataAccessStuff.Object);
myClass.DoWork();
// make sure both methods are called at least once ...
mockDataAccessStuff.Verify(x => x.AddCmdParameter(It.IsAny<string>()), Times.Once());
mockDataAccessStuff.Verify(x => x.InitialiseDbCommand(It.IsAny<string>()), Times.Once());
}
我认为这是编写测试的一种非常简洁和可读的方式。
关于c# - 最小起订量方法调用顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24084511/
我是一名优秀的程序员,十分优秀!