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