我有一个包含单个公共外观的包,有两个方法,start和stop。 因为这个外观适用于类似于50+内部/友好类包的东西,所以我需要一种能够直接测试其中几个内部类的方法。
我正在使用Eclipse和JUnit。
反射可能是一种好方法,但为什么我自己编写所有这些反射代码,是否有一个很好的工具可以生成包装公共类(如.net visual studio can)?
其次,有人可以解释如何管理JUnit的双源树,或者请参考该主题的好文章? 我看过几篇博客文章,但更喜欢看看这里的人是否有一个很好的解释/参考。
而且,最重要的是 - 无论是否测试内部类,这不是我的问题,这是我的设计,这是我喜欢的工作方式。 有些人认为你应该,有些人认为你不应该,所以请不要发布答案,例如:你应该只测试公众,从而解决了问题。 我在stackoverflow中搜索并找不到关于它的好帖子。
提前谢谢你,
詹姆斯。
答案 0 :(得分:1)
据我了解Louis Wasserman的回复,你的文件结构看起来像是
src/production/mypackage/MyClass.java
src/junit/mypackage/MyClassTest.java
然后src / production / mypackage / MyClass.java看起来像
class MyClass
{
void start ( ) { ... }
void stop ( ) { .... }
class InnerClass1 { ... }
class InnerClass2 { ... }\
...
class InnerClass50 { ... }
}
由于MyClassTest和MyClass在同一个包中,mypackage.MyClass.InnerClass1 ... 50可以从MyClass测试中进行测试。
确保MyClass不依赖于MyClassTest。对于生产,您可以编译生产目录中的所有内容(跳过junit tests wholeley)。用于测试编译两个目录。
答案 1 :(得分:1)
您维护双源树的直觉是正确的。只需要两个源目录,其中包含相同的目录/包结构。编译为类似的单独输出目标,但在运行测试时将所有内容放在类路径中。尽管类可能甚至是不同的输出目录,但它们相同的目录/包结构将使其工作。如果你使用Maven,这是标准的。使用该工具,源目录名称为src/main
和src/test
,输出目录为target/classes
和target/test-classes
。事实上Maven支持这个开箱即用的事实表明了这种做法在Java社区中的标准,你应该放心使用它。 (就此而言,我鼓励你使用Maven,它会让你的生活变得更轻松。你可以使用Maven和Eclipse,很多人都可以。)
现在单元测试位于包中,您可以测试所需的所有受包保护的类。我不同意那些只说测试public
事情的人。事实上,作为TestNG的作者,塞德里克·贝斯特(Cedric Beust)的杰出人物,if it can break, it should be tested, and that includes private methods认为。我有单元测试的私有方法with a little help from reflection。包保护的东西当然更容易测试。无论如何,我认为仅仅public
事应该被测试是一种宗教观点。