编写单元测试时断言“什么也没发生”

Tit*_*tan 5 .net c# unit-testing mstest

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

由于可能的副作用列表是无限的,添加大量 Assert 以确保每一步都没有任何变化似乎是徒劳的,并且混淆了测试的目的。

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

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

Ser*_*nov 2

确保不会发生任何“坏”或意外情况的选项之一是确保使用依赖项注入和模拟的良好实践:

[Test]
public void TestSomething()
{
    // Arrange
    var barMock = RhinoMocks.MockRepository.GenerateStrictMock<IBar>();
    var foo = new Foo(barMock);
    // Act
    foo.DoSomething();
    // Assert
    ...
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,如果Foo不小心触及Bar,将导致异常(严格模拟)并且测试失败。这种方法可能不适用于所有测试用例,但可以作为其他潜在实践的良好补充。