Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为java友好/内部包类和内部/友好方法生成公共访问器类_Java_Android_Unit Testing_Junit - Fatal编程技术网

为java友好/内部包类和内部/友好方法生成公共访问器类

为java友好/内部包类和内部/友好方法生成公共访问器类,java,android,unit-testing,junit,Java,Android,Unit Testing,Junit,我有一个带有单个公共外观的包,有两个方法,启动和停止。 因为这个facade是一个50+的内部/友好类包,所以我需要一种能够直接测试其中几个内部类的方法 我正在使用Eclipse和JUnit 反射可能是一种很好的方法,但是为什么我自己编写所有这些反射代码呢?有没有一个好的工具可以生成包装器公共类(比如.NETVisualStudio可以) 第二,有人能解释一下如何管理JUnit的双源代码树,或者让我参考一下该主题中的一篇好文章吗? 我看了几篇博客文章,但我更想看看这里的人是否有好的解释/参考 而

我有一个带有单个公共外观的包,有两个方法,启动和停止。 因为这个facade是一个50+的内部/友好类包,所以我需要一种能够直接测试其中几个内部类的方法

我正在使用Eclipse和JUnit

反射可能是一种很好的方法,但是为什么我自己编写所有这些反射代码呢?有没有一个好的工具可以生成包装器公共类(比如.NETVisualStudio可以)

第二,有人能解释一下如何管理JUnit的双源代码树,或者让我参考一下该主题中的一篇好文章吗? 我看了几篇博客文章,但我更想看看这里的人是否有好的解释/参考

而且,最重要的是——要么测试内部类,要么不测试内部类,这不是我的问题,这是我的设计,这是我喜欢的工作方式。 有些人认为你们应该,有些人认为你们不应该,所以请不要张贴这样的答案:你们应该只测试公众,这样问题就解决了。 我在stackoverflow中搜索,找不到关于它的好线索

提前谢谢大家,


詹姆斯。

据我所知,路易斯·沃瑟曼的回答是,您的文件结构如下所示

src/production/mypackage/MyClass.java

src/junit/mypackage/MyClassTest.java
class MyClass
{
      void start ( ) { ... }
      void stop ( ) { .... }

      class InnerClass1 { ... } 
      class InnerClass2 { ... }\
      ...
      class InnerClass50 { ... }
}
然后src/production/mypackage/MyClass.java如下所示

src/production/mypackage/MyClass.java

src/junit/mypackage/MyClassTest.java
class MyClass
{
      void start ( ) { ... }
      void stop ( ) { .... }

      class InnerClass1 { ... } 
      class InnerClass2 { ... }\
      ...
      class InnerClass50 { ... }
}
因为MyClassTest和MyClass在同一个包中,所以可以从MyClass测试中测试mypackage.MyClass.InnerClass1…50


确保MyClass在任何方面都不依赖MyClassTest。对于生产,您可以编译生产目录中的所有内容(完全跳过junit测试)。对于测试,请编译这两个目录。

您维护双源代码树的本能是正确的。只需拥有两个源目录,其中具有相同的目录/包结构。编译到类似的独立输出目的地,但在运行测试时将所有内容都放在类路径中。尽管这些类可能是不同的输出目录,但它们相同的目录/包结构将使其工作。如果您使用Maven,这是标准的。使用该工具,源目录名为
src/main
src/test
,输出目录为
target/classes
target/test classes
。Maven支持这种开箱即用的做法,这表明这种做法在Java社区中是多么标准,您应该自信地使用它。(就此而言,我鼓励您使用Maven,它将使您的生活更加轻松。您可以将Maven与Eclipse一起使用,很多人都可以这样做。)


单元测试现在位于包中,您可以测试所有需要的包保护类。我不同意那些只说测试
公共事物的人。事实上,与《TestNG》的作者塞德里克·贝斯特(Cedric Beust)一样,他也是一位杰出人物,他认为。我已经对私有方法进行了单元测试。包保护的东西当然更容易测试。不管怎样,我认为说只有
public
东西应该被测试是一种宗教观点

首选的方法是使用JUnit的并行源代码树,完全避免反射。您想要测试的任何“内部”都应该是包私有的,而不是完全私有的。太好了!我来自.NET世界,不太熟悉它是如何正确完成的,我想第一次就把它做好,你能发布你的技术吗?:)25%很低,但我是一个新用户,很少被问到问题。。。相信我,我非常愿意接受一个好的答案。。我是一个有礼貌、有礼貌的人。无论是真实的还是在线的。非常感谢您的回复,再加上@sparc_传播,这解决了我的问题。