单元测试和测试驱动非公共方法的开发

时间:2012-07-26 17:40:24

标签: .net unit-testing testing mstest

我是TDD概念的新手,我刚刚开始为我的应用程序的公共接口编写好的单元测试。

目前,我正在开发一个类库,其中公共接口相对较小,但是在幕后的类中存在大量的复杂性。此功能在内部作用域类和方法中实现,因此不可用于单元测试。我不想公开这些类和方法,因为它们不应该供消费应用程序使用,但我不觉得我可以在不编写更具体的测试用例的情况下充分测试所有应用程序的功能。

有人可以向我解释我如何完成此类测试吗?或者我的方法有问题,我可以改变以促进更好的测试。

BTW,我在C#.NET环境中工作,但我认为我的问题也适用于Java或其他任何平台。

4 个答案:

答案 0 :(得分:1)

由于您使用的是dotnet,因此您可以将其他类设置为dll-internal,并使用businessclass中的internalsvisibleto属性来允许unittest-dll访问它们。

答案 1 :(得分:0)

在Java中,您通常会使用类似PowerMock的Whitebox类或使用默认(包)范围来进行访问检查。换句话说,根本没有访问修饰符。单元测试通常与被测试类在同一个包中。在.NET中,您可能能够获得与内部作用域类似的功能,但听起来您需要在此测试中将测试和您的代码置于相同的程序集中。如果这是一个问题,也许您可​​以使测试程序集成为测试代码的friend assembly

答案 2 :(得分:0)

大多数单元测试大师会告诉你,你应该只测试公共接口。但是我不同意他们,因为我经常在类似的情况下结束。如果您使用的是C#和支持单元测试的Visual Studio版本,那么您很幸运。只需点击Test->新测试...然后选择“单元测试向导”。然后选择您要测试的任何方法(包括私有方法)。 Visual Studio将自动为您生成单元测试。对于私有方法,它将创建名为MyClass_Accessor的影子类。这些类与原始类完全相同,但它们的私有成员是公共的。如果您更改班级,这些影子课程也会自动更新。

答案 3 :(得分:0)

不要对私有方法进行单元测试。如果它值得测试,那么值得公开或功能应该属于自己的类。似乎破坏了SOLID原则。