1

根据这个例子,它和它测试的控制器在同一个包中。

为什么这是必要的?

我认为将所有单元测试放在一个testing包中会更整洁 - 这样做会有问题吗?

package com.example.web.controllers;

...imports...

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/testApplicationContext.xml"})
public class HomeControllerSysTest extends AbstractJUnit4SpringContextTests {

    private static final Logger log = Logger.getLogger(
            HomeControllerSysTest.class.getName());
    private final LocalServiceTestHelper helper =
            new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig());

    @Before
    public void setUp() {
        helper.setUp();
    }

    @After
    public void tearDown() {
        helper.tearDown();
    }

    @Test
    public void testHomeController() throws IOException {
        final String url = "http://localhost:8080/movie/test";

        final WebClient webClient = new WebClient();
        final HtmlPage page = webClient.getPage(url);
        assertEquals("The Page Title", page.getTitleText());

        // there are many different methods to query everything on your
        // page. Please refer to the HttpUnit homepage
        HtmlElement header = page.getElementsByTagName("h1").get(0);
        assertNotNull(header);

        String headerValue = header.getNodeValue();
        assertEquals(headerValue, "Hello World!");
    }
}
4

3 回答 3

7

将它们放在同一个包中允许测试包私有对象和方法。为了保持整洁,通过创建并行源树将测试放在“相同”包中。

src/
  com/
    example/
      MyClass.java

tests/
  com/
    example/
      MyClassTest.java

两个源代码树都可以编译到同一个输出目录或以其他方式添加到类路径中,从而就 JVM 而言,它们位于同一个包中。

于 2010-10-23T18:13:57.250 回答
3

它必须是吗?不。

应该是吗?这就是约定。

在生产环境中,无论您如何组织项目,具有适当属性的 Ant 任务都可以删除所有测试类。因此,在这方面,物理位置并不重要。

对于正常的“源代码”不和谐,最好让测试用例靠近相关源代码,这样您就可以更轻松地发布源代码。

Java 具有包级别的访问权限(类似于私有和公共访问权限),但我认为这并不经常使用。

最重要的是你单元测试。其余的并不那么重要,IMO。

于 2010-10-23T18:19:47.317 回答
2

单元测试可以在任何包中。本质上,它们只是用于测试被测试类的行为的单独类。

这里最重要的问题是 JUnit 测试类的放置对于它们所属的项目来说是一个常量。即它们要么总是在同一个包中,要么在一个名为 test 的子包中,或者完全在一个单独的包中。

我的偏好是将 JUnit 测试类放在一个单独的包中,通过将顶级名称替换为“test”来定义,这样org.util.strings.StingUtil就有一个名为test.util.StringUtilTest.

这样很容易找到测试类,并且可以很容易地将它们分成库 .jar 和它们的测试 .jar。此外,您不会冒 JUnit 测试无意中使用包级别访问测试类的风险;测试类必须使用与世界其他地方相同的接口。(在我看来,专门用于测试支持的包级挂钩是邪恶的,所以最好通过将测试放在其他地方来确保它们没有用。)

于 2010-10-23T18:46:18.407 回答