3

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

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

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

顺便说一句,我在 C# .NET 环境中工作,但我认为我的问题也适用于 Java 或任何数量的其他平台。

4

4 回答 4

1

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

于 2012-07-26T17:58:30.687 回答
0

在 Java 中,您通常会使用类似 PowerMock 的 Whitebox 类或使用默认(包)范围来绕过访问检查。换句话说,根本没有访问修饰符。单元测试通常与被测类在同一个包中。在 .NET 中,您可能能够在内部范围内获得类似的功能,但在这种情况下,听起来您需要您的测试和被测代码位于同一个程序集中。如果这是一个问题,也许你可以让你的测试程序集成为被测代码的朋友程序集。

于 2012-07-26T17:50:57.460 回答
0

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

于 2012-07-26T20:52:58.023 回答
0

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

于 2012-07-26T18:00:40.840 回答