创建nunit测试而不使用api导出它们

时间:2008-12-31 16:38:13

标签: java unit-testing tdd nunit

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

5 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

就我个人而言,我的方法只是测试暴露的功能,所以你最终只测试封装好的部分。

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

通常,在进行单元测试时,您不应该关注所测试内容的内部情况,因此我发现这是接近它的最佳方式。

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

更好的解决方案是为您的测试代码创建一个单独的目录,它只是镜像生产代码的包结构。这是我的所作所为:

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

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