0

我是使用 nunit(以及一般的 Java 开发)进行单元测试的新手。在为类上的私有方法创建单元测试时,看起来测试文件必须与被测试的类在同一个包中。避免导出单元测试 API 的典型方法是什么?我可以使类/测试方法受包保护吗?还是开发人员通常有一个单独的发布版本,不包括单元测试文件?

4

5 回答 5

1

我可以告诉 IntelliJ 或 Ant 不要在部署中打包 JUnit 测试。我在与源代码不同的目录中进行了测试,这使得它成为可能。

不要将源类和测试类混在一起。将它们分开以使您使用的工具/脚本更容易部署。

于 2008-12-31T16:43:05.280 回答
0

测试文件不必与被测试的类在同一个包中。事实上,将测试文件放在一个完全独立的包中是一种很好的做法,允许它们测试公共 API 而无需关心包级实现细节。

或者,您可以设置构建脚本(例如 Nant)以在构建发布可执行文件时忽略包含“测试”的文件。

于 2008-12-31T16:44:11.020 回答
0

就我个人而言,我的方法只是测试暴露的功能,因此您最终只能测试封装良好的部分。

这通常会导致我的设计包含具有明确定义的功能的小类,这些小类更容易测试。

通常,在进行单元测试时,您不应该关心您正在测试的内部结构,所以我发现这是处理它的最佳方法。

我也同意最好将测试和生产代码分开。

于 2008-12-31T17:00:03.250 回答
0

将测试源代码保留在应用程序源代码之外。一般来说,只测试暴露的功能。如果您确实需要测试私有行为,请创建一个扩展真实对象并允许公共访问私有行为的测试对象。

于 2008-12-31T21:31:59.893 回答
0

我认为将您的测试代码移出 CUT(被测类)的包是错误的。在某些时候,您可能想要测试受保护的方法或类,而将您的测试代码放在另一个包中会使这变得困难或不可能。

更好的解决方案是为您的测试代码创建一个单独的目录,该目录仅反映您的生产代码的包结构。这就是我所做的:

src/main/java/com/example/Foo.java
src/test/java/com/example/FooTest.java

src/test/**然后,在打包和部署时,您的构建脚本可以非常简单地忽略。

于 2009-01-02T02:00:21.083 回答