【发布时间】:2014-07-27 21:10:14
【问题描述】:
我正在模拟我们用于某些企业库调用的包装器。世界上一切都很好,我的测试通过了,实际的代码工作了!
不过,我随后扩展了功能,并验证了所有测试仍然通过。宾果 - 他们做到了。然而,他们并没有在现实世界中,因为人们期望
InitialiseDBCommand(string, commandtype)
之前会被调用
AddCmdParameter(string, dbtype, object)
所以像一个好孩子一样,我想做的第一件事就是编写一个测试来展示这种行为并期望抛出异常。
如果 InitialDBCommand 没有被任何字符串调用,我需要安装 AddCmmParater 以引发异常。
我想我可以通过回调来做到这一点,但感觉应该有一个方法调用序列(而不是方法返回序列)。
类似
iDataAccessHelper.Setup(s=>s.AddCmdOutputParameter(It.IsAny<string>(),
It.IsAny<DbType>(),
It.IsAny<int>()))
.When(w=>w.InitialiseDBCommand(etc etc)
.Throws<NullReferenceException>()
任何指针?
【问题讨论】:
-
您实际测试的是什么?哪种方法?
AddCmdParameter?您应该将此场景编写为单元测试,而不是复杂的模拟场景。 -
@DimitarDimitrov 简单地说,我相信 OP 想要一个测试来证明 InitialiseDBCommand 在 AddCmdParameter 之前被调用
-
我正在测试一种名为“WriteBlob”的方法,该方法使用数据访问层。数据访问层包含这 2 个调用,它们似乎具有顺序依赖性。我可以看到我们在做什么 - 对此的测试需要更接近数据访问层代码本身。
-
它们似乎更多地与对同一方法的多次调用相关,每个调用都返回不同的值。现在在 Moq 内的支持。
标签: c# unit-testing moq