如何在NUnit中检查对象不包含指定项?
NUnit中实现「集合不包含指定项」校验的方法
不需要手动给集合Contains()方法的返回值取反写断言,NUnit本身提供了语义更清晰、报错更友好的原生实现。
NUnit 3.x及以上版本主推基于约束模型的Assert.That()断言模式,没有单独为「不包含」逻辑封装类似Assert.DoesNotContain()的静态方法,而是通过语义化约束组合实现反向判断,推荐写法如下:
// 语义最贴近Contains反向逻辑的写法 Assert.That(result.Dependencies, Does.Not.Contain("tableName")); // 等价写法,效果完全一致 Assert.That(result.Dependencies, Has.No.Member("tableName"));
这两种写法相比手动取反的写法优势很明显:
- 可读性更强,代码本身就是自然语义的「断言目标集合不包含指定项」,不需要额外添加逻辑非运算符
- 断言失败时会自动输出完整的集合实际内容、期望不存在的目标值,不会像
Assert.That(!result.Dependencies.Contains<string>("tableName"))这类手动取反写法那样,只返回「期望True实际为False」的模糊报错,排查问题效率更高。
如果使用的是已经停止维护的NUnit 2.x版本,没有上述约束语法支持,才需要使用手动取反的临时写法,目前主流在用的NUnit版本都支持上述标准实现。
内容的提问来源于stack exchange,提问作者Axel Köhler
相关产品推荐
相关产品推荐

