c# - 在编写单元测试时断言 "nothing happened"

标签 c# .net unit-testing mstest

在写单元测试的时候,有没有一种简单的方法可以保证没有意外发生?

由于可能的副作用列表是无限的,添加大量断言以确保在每个步骤中没有任何更改似乎是徒劳的,并且混淆了测试的目的。

我可能错过了一些框架功能或良好实践。
我正在使用 C#7、.net 4.6、MSTest V1。

编辑: 更简单的例子是测试 View 模型的 setter ,应该发生两件事:值应该改变并且应该引发 PropertyChanged 事件。 这两件事很容易检查,但现在我需要确保其他属性值没有改变,没有引发其他事件,没有触及系统剪贴板...

最佳答案

您错过了单元测试的要点。它们是“证据”。您无法从逻辑上证明否定的断言,因此即使尝试也没有意义。

每个单元测试中的断言应该证明期望的行为已经完成。就这样。

如果我们将问题简化为荒谬,每个单元测试都需要我们断言被测函数没有引发热核 war 。

单元测试不是您需要执行的唯一一种测试。有功能测试、集成测试、可用性测试等,各有侧重。对于单元测试,重点是证明单个功能的预期行为。因此,如果该函数应该完成两件事,只需断言这两件事都发生了,然后继续。

关于c# - 在编写单元测试时断言 "nothing happened",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48588310/

相关文章:

javascript - 为什么调试时myArray.length显示为0?

java - 如何对 servlet 进行单元测试?

unit-testing - 在 visual studio 上使用 Resharper 调试单元测试时出现 FatalExecutionEngineError

c# - 使用字符串作为 linq 查询的属性

c# - 如何在*不*使用绑定(bind)的情况下针对对象评估 PropertyPath? (即绑定(bind)本身使用什么?)

c# - 如何提取子字符串并将其替换为不同的值

.net - 过滤 LoadWith 结果

c# - 如何: Write a thread-safe method that may only be called once?

c# - 将数据从 Sql Server 推送到桌面应用程序

python - 如何使用 Python 的单元测试断言数据库错误?