2012-03-04 122 views
0

我正在努力重新整理项目中的细节。我已经组织了所有类(但不正确),现在我认为我需要嵌套我的包,而不是将它们放在不同的级别上?JUnit测试用例 - 无法看到类

现在,当我尝试编写我的项目中的类的测试类时,我无法看到相关方法,而没有对所有内容使用反射。

层级结构中我此刻的 enter image description here

什么我需要改变,以能够在不使用反射的一切测试,并能够正确地窝我的包?

谢谢

+0

你是什么意思的'看到相关的方法'和'使用反射'?也许你的意思是你的方法的可见性是默认的包级别?你可以通过公开它来解决这个问题:'public void testMyStuff()' – 2012-03-04 10:29:24

+0

当我在我的测试类中创建类的对象时,它们似乎从来没有任何方法可用? – Biscuit128 2012-03-04 10:31:08

+1

你能向我们展示一个类和它的测试的最小例子,以便我们可以看到你实际上在做什么? – DNA 2012-03-04 10:48:36

回答

2

方法的默认可访问性是'包可见性'。看到这篇文章来自IBM这个:

http://www.ibm.com/developerworks/library/ws-tip-mem-visibility.html

为了让你的方法到外面包类可见,让他们公开:

public void myMethod() {...} 
+0

我意识到这一点,只是即使将它们改为public也不会改变任何内容,所以我没有得到代码完成的默认提议。 – Biscuit128 2012-03-04 10:38:02

+0

编译器是否允许您访问它们(没有代码完成)?也许你应该清理整个项目(菜单项目 - >清洁......) – 2012-03-04 10:39:20

+0

哦,你使用的任何内部类也必须公开!如果所有这些都不起作用,我想你应该在确切的情况(使用/使用特定类,包裹位置等)的问题上写更多,也许这有助于找到答案。 – 2012-03-04 10:46:34

3

安排测试文件有与src文件相同的包结构。这样,co.uk.mine.SomeClass中的任何方法都可以有相应的co.uk.mine.SomeClassTest,它可以访问任何非私有方法。私有方法可以通过反射来访问。你的ide应该允许你设置2个文件结构来保持测试代码的不同:

../src/co/uk/mine/SomeClass.java 
../test/co/uk/mine/SomeClassTest.java 
+0

是的。这是组织单元测试类的常规方法 - 测试类与被测试类位于同一个包中,因此它可以看到它的包访问方法,但是在不同的源文件夹中,所以测试和主代码是分开的。有些人会以另一种方式告诉你这样做,但忽视它们是安全的。 – 2012-03-04 12:15:55

+0

值得一提的是,Java世界中的标准是'Maven layout',其中在项目的根目录中,有一个目录'src',里面有'main'和'test',每个内部都是一个实际上是源代码的目录'java'。遵守这个标准没有特别的理由,但你可能会在野外遇到它。 – 2012-03-04 12:17:36

+0

同意maven布局(它是我的偏好),但是很多人会使用ant或其他可能不同的约定。我想重点是在类路径上使用2个目录结构,这些目录结构允许镜像包但是单独的文件夹。再次,我更喜欢Maven,如果你从未使用它,它会鼓励你看看。 – Romski 2012-03-16 13:48:45