|
|
1
2
我将比Yoshi的评论更进一步。
这个
你需要为我张贴测试,以便能够更具体。 更新(添加测试后)
改变
如果使用
我怀疑这两个“1”字符串需要相同才能起作用,所以与其复制字符串,不如声明一个局部变量并使用它,而不要同时使用这两个字符串。 我建议不要使用像1这样的值;喜欢随机键入一些内容,这样它就不会碰巧通过。我的意思是,想象一个以两个整数为参数的方法:在为该方法调用Setup或Verify时,如果对这两个整数使用相同的值,即使代码错误地交换了值(将每个值传递到错误的参数),测试也可能通过。如果在调用Setup或Verify时使用不同的值,则只有在正确的参数中传递了正确的值时,它才会起作用。
现在将验证更改回使用
更新2 考虑平铺屋顶。每块瓷砖负责保护屋顶的一小部分,与下面的部分略微重叠。当使用mocking时,这个平铺屋顶就像一组单元测试。 每个“tile”表示一个测试夹具,覆盖真实代码中的一个类。“重叠”表示类和它使用的东西之间的交互,必须使用mock来定义,mock使用Setup和Verify(在Moq中)之类的东西进行测试。 如果这种模拟做得不好,那么瓷砖之间的间隙将很大,屋顶可能会泄漏(即代码可能无法工作)。嘲弄如何做得不好的两个例子:
最后一个是你最大的风险;但这与编写糟糕的单元测试的风险没有什么不同(无论它是否涉及模拟)。如果我编写了一个单元测试,它运行了被测试的代码,但没有做出任何断言,或者对无关紧要的东西做出了断言,那么这将是一个弱测试。使用
有时无法指定值,您必须使用
如果我写了一些单元测试,让我的代码覆盖率达到100%;但没有测试所有可能的场景,这将是薄弱的单元测试。我有没有什么测试来找出这些写得不好的测试?不,不使用mocking的人也没有这样的测试。 回到瓦片屋顶的类比。。。如果我没有mocking,并且必须使用真正的依赖项来测试每个部分,那么我的屋顶就是这样的。我可以用一块瓷砖来填补屋顶底边的所有碎片。目前没有问题。对于屋顶上的下一组瓷砖,对于一块瓷砖,我需要一块三角形瓷砖,覆盖该瓷砖的位置,并覆盖其下方的瓷砖(即使它们已经被瓷砖覆盖)。不过,还不错。但是再往上爬15块瓷砖,这会让人筋疲力尽。 将其带到真实场景中,假设我正在测试一段客户端代码,该代码使用两个WCF服务,其中一个是第三方,每次使用收费,其中一个受windows身份验证保护,可能其中一个服务在到达数据层并与数据库交互之前,在其业务层中有复杂的逻辑,我可能有一些缓存。我敢说,如果有可能的话(在一个人的一生中),没有嘲弄地为此编写像样的测试可能会被描述为过于复杂。。。 除非你使用嘲弄,这允许你。。。
(为了记录在案,测试的执行速度从未对我使用模拟的决定起到任何作用。) 幸运的是,嘲弄很简单,只需要比我在这里所说的更多的理解。只要您承认,与全面集成测试相比,使用模拟是一种折衷,它可以节省开发和维护时间,这是任何产品经理都会感激的。因此,尽量保持瓷砖之间的间隙较小。 |
|
|
2
2
尝试按以下方式设置方法: mockRepo。设置(m=>m.SaveProject(It.IsAny(),It。IsAny()) 然后验证是否使用它。我也是。 或者直接使用它。对于因某种原因而不希望(或无法)正确检查的参数,请单击此处。在后一种情况下,还可以创建自定义匹配器。 如其他评论所述。问题可能出在您设置的模拟参数上。 |
|
|
pseudodev · 失败的测试仅显示堆栈跟踪,不显示完整日志 1 年前 |
|
|
Coden00b · 将可选参数传递给xunit中的类夹具构造函数 1 年前 |
|
Kamran Khan · 使用单元测试ASP。NET核心 1 年前 |
|
|
hernantos · InMemoryDb的单元测试的浮动异常 2 年前 |
|
|
Natan · FakeIseasy自动模拟东西 2 年前 |
|
|
Aboliii · 如何使用moq和xUnit进行单元测试删除操作? 2 年前 |