C# 使用SelfTest()方法测试私有成员
我有很多类包装数据库查询。我希望能够测试运行每个查询,并验证返回给类的私有成员的结果。我突然想到一个可能很野蛮的想法,那就是给我的查询包装器一个C# 使用SelfTest()方法测试私有成员,c#,unit-testing,xunit,C#,Unit Testing,Xunit,我有很多类包装数据库查询。我希望能够测试运行每个查询,并验证返回给类的私有成员的结果。我突然想到一个可能很野蛮的想法,那就是给我的查询包装器一个public SelfTest()方法,XUnit可以通过[Fact]属性看到它。因此,我的测试方法可以访问类的内部,并可以详细验证DB请求的结果 我是否应该意识到不愉快的后果?我将向我的DB包装器类添加一个公共方法,但该方法不会造成任何损害。我会让我的应用程序直接由XUnit“消费”,而不是像我习惯的那样在单独的项目中进行测试,但这似乎是无害的,不?将
public SelfTest()
方法,XUnit可以通过[Fact]
属性看到它。因此,我的测试方法可以访问类的内部,并可以详细验证DB请求的结果
我是否应该意识到不愉快的后果?我将向我的DB包装器类添加一个公共方法,但该方法不会造成任何损害。我会让我的应用程序直接由XUnit“消费”,而不是像我习惯的那样在单独的项目中进行测试,但这似乎是无害的,不?将SelfTest()方法添加到生产代码中不会对功能产生直接影响。但你认为这是一种
“babaric”是由于违反了我们称之为清洁守则的几项原则造成的
仅举几点:
- 首先,这将违反单一责任原则。除了功能本身之外,类还负责测试自身
- 类中增加了更多的代码和复杂性。如果有人对理解功能感兴趣,谁愿意阅读所有的测试代码
- 您可以向生产代码(在本例中为XUnit)添加其他依赖项,并且这些程序集将成为您所提供产品的一部分
InternalsVisibleTo
注释,您可以授予测试项目程序集访问要测试的程序集的内部方法和属性的权利
例如:
在MyAssembly行的assembly.cs中添加
[assembly:InternalsVisibleTo("MyAssembly.UnitTests")]
然后在MyAssembly.UnitTests中可以使用内部方法。将SelfTest()方法添加到生产代码中不会对功能产生直接影响。但你认为这是一种
“babaric”是由于违反了我们称之为清洁守则的几项原则造成的
仅举几点:
- 首先,这将违反单一责任原则。除了功能本身之外,类还负责测试自身
- 类中增加了更多的代码和复杂性。如果有人对理解功能感兴趣,谁愿意阅读所有的测试代码
- 您可以向生产代码(在本例中为XUnit)添加其他依赖项,并且这些程序集将成为您所提供产品的一部分
InternalsVisibleTo
注释,您可以授予测试项目程序集访问要测试的程序集的内部方法和属性的权利
例如:
在MyAssembly行的assembly.cs中添加
[assembly:InternalsVisibleTo("MyAssembly.UnitTests")]
然后在MyAssembly.UnitTests中可以使用内部方法。为什么不将查询方法声明为内部方法,并通过assembly.cs()中的InternalsVisibleTo属性从测试项目中访问它们?好提示,谢谢。说实话。如果我可以在生成的类中安全地包含SelfTest()方法,那么我就不必管理另一个位置来生成代码,生活就会简单得多。如果没有陷阱,为什么不将查询方法声明为内部方法,并通过assembly.cs()中的InternalsVisibleTo属性从测试项目中访问它们呢?好的提示,谢谢。说实话。如果我可以在生成的类中安全地包含SelfTest()方法,那么我就不必管理另一个位置来生成代码,生活就会简单得多。只要没有陷阱,我接受这些观点。但InternalsVisibleTo迫使我将私人会员提升到internal,我更不愿意这样做。我接受这些观点。但InternalsVisibleTo迫使我将私人成员提升到internal,而我更不愿意这样做。