我有一堆包装数据库查询的类。我希望能够测试运行每个查询,并验证结果,返回给我的类的私有成员。我想到的一个野蛮的想法是给我的查询包装器一个public SelfTest()
方法,XUnit可以看到[Fact]
属性。因此,我的测试方法可以访问类的内部,并可以详细验证数据库请求的结果。
我应该注意到不愉快的后果吗?我将向我的DB包装器类添加一个公共方法,但该方法不会造成任何损害。我会通过XUnit将我的应用程序直接“消耗”,而不是像我以前那样在单独的项目中进行测试,但这似乎无害,不是吗?
答案 0 :(得分:2)
将SelfTest()方法添加到生产代码中对功能没有直接影响。但是你的想法是这样的 ' babaric'违反了我们称之为清洁法典的几项原则。
仅举几点:
但是另一种方法是什么?
为了测试而公开所有方法和属性也不合适。但是使用assembly.cs中的InternalsVisibleTo
注释,您可以为测试项目程序集提供访问要测试的程序集的内部方法和属性的权限。
示例:
在MyAssembly的assembly.cs中添加
行[assembly:InternalsVisibleTo("MyAssembly.UnitTests")]
然后在MyAssembly.UnitTests中可以使用内部方法。