Tor*_*son 14 c# nunit unit-testing nunit-3.0
我目前正在重写一些单元测试以使用NUnit 3而不是NUnit 2,并且需要将一些断言更改为基于约束的断言.我有以下断言:
Assert.IsNullOrEmpty(result);
Run Code Online (Sandbox Code Playgroud)
我改为:
Assert.That(result, Is.Null.Or.Empty);
Run Code Online (Sandbox Code Playgroud)
但是,断言时我对可读性并不完全满意IsNotNullOrEmpty:
Assert.That(result, Is.Not.Null.And.Not.Empty);
Run Code Online (Sandbox Code Playgroud)
我目前的建议是创建以下静态类:
public static class Text
{
public static EmptyConstraint IsNullOrEmpty => Is.Null.Or.Empty;
public static EmptyConstraint IsNotNullOrEmpty => Is.Not.Null.And.Not.Empty;
}
Run Code Online (Sandbox Code Playgroud)
用法:
Assert.That(result, Text.IsNotNullOrEmpty);
Run Code Online (Sandbox Code Playgroud)
这提供了更好的可读性,但代价是引入了自定义约束.是否存在制定相同断言的标准方法,还是应该继续使用Is.Not.Null.And.Not.Empty?
das*_*ght 18
Is.Null.Or.Empty如果没有Test课,你的读取断言完全没问题.此外,当这个断言失败时,你确切知道发生了什么:你有一个string非空的有效对象.
我看到的"DeMorgan-ized"版本的否定所带来的问题,即Is.Not.Null.And.Not.Empty它太长了,而且它的读取几乎没有那么好Is.Null.Or.Empty.
但是,我不是单独约束它,而是单独断言它的部分,即
Assert.That(result, Is.Not.Null);
Assert.That(result, Is.Not.Empty);
Run Code Online (Sandbox Code Playgroud)
我这样做的原因是两个失败条件不重叠,即result可能是null,或者它可能是空的,但它不能同时是两个.单个复合断言不区分这两种情况,因此您最终会找一个调试器来查看是否result为null空.
另一方面,单独的断言会告诉您究竟发生了什么,同时保持非常可读.他们为每个断言"花费"额外的一行; 我认为这是获得有关潜在故障的更准确信息的合理成本.
| 归档时间: |
|
| 查看次数: |
4877 次 |
| 最近记录: |