Java 该单元测试是否必须与它测试的控制器在同一个包中?
根据,它和它测试的控制器放在同一个包中 为什么这是必要的 我认为将我的所有单元测试放在一个测试包中会更整洁——这样做会有问题吗Java 该单元测试是否必须与它测试的控制器在同一个包中?,java,unit-testing,htmlunit,Java,Unit Testing,Htmlunit,根据,它和它测试的控制器放在同一个包中 为什么这是必要的 我认为将我的所有单元测试放在一个测试包中会更整洁——这样做会有问题吗 package com.example.web.controllers; ...imports... @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"/testApplicationContext.xml"}) public class HomeControlle
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!");
}
}
将它们保持在同一个包中允许测试包私有对象和方法。 为了保持整洁,通过创建并行源代码树将测试放在同一个包中
src/
com/
example/
MyClass.java
tests/
com/
example/
MyClassTest.java
这两个源树都可以编译到相同的输出目录,或者以其他方式添加到类路径,从而使它们在JVM所关注的相同包中。将它们保持在相同包中可以测试包私有对象和方法。 为了保持整洁,通过创建并行源代码树将测试放在同一个包中
src/
com/
example/
MyClass.java
tests/
com/
example/
MyClassTest.java
这两个源代码树都可以编译到同一个输出目录中,或者以其他方式添加到类路径中,这样就JVM而言,它们就在同一个包中。必须这样吗?没有 应该是吗?这是惯例 当不适合生产时,具有适当属性的Ant任务可以删除所有测试类,无论您如何组织项目。因此,物理位置在这方面并不重要 对于正常的“源代码”不一致,最好让测试用例与相关的源代码非常接近,这样您就可以更容易地发布源代码 Java具有类似于私有和公共访问的包级访问,但我认为这种访问并不经常使用
重要的是你有单元测试。其余的在我看来并不重要。一定要这样吗?没有 应该是吗?这是惯例 当不适合生产时,具有适当属性的Ant任务可以删除所有测试类,无论您如何组织项目。因此,物理位置在这方面并不重要 对于正常的“源代码”不一致,最好让测试用例与相关的源代码非常接近,这样您就可以更容易地发布源代码 Java具有类似于私有和公共访问的包级访问,但我认为这种访问并不经常使用
重要的是你有单元测试。其余的就不那么重要了。单元测试可以在任何包中进行。本质上,它们只是用于测试被测试类行为的独立类 这里最重要的问题是JUnit测试类的位置对于它们所属的项目来说是一个常量。也就是说,它们总是在同一个包中,或者在名为test的子包中,或者在一个单独的包中 我倾向于将JUnit测试类放在一个单独的包中,该包通过将顶级名称替换为“test”来定义,因此org.util.strings.StingUtil将有一个名为test.util.StringUtilTest的JUnit测试类
通过这种方式,很容易找到测试类,并且可以很容易地将它们分为library.jar和它们的test.jar。此外,您也不会冒JUnit测试无意中使用包级访问被测试类的风险;测试类必须使用与世界其他部分相同的接口。在我看来,专门用于测试支持的包级钩子是有害的,因此最好通过将测试放在其他地方来确保它们没有用处。单元测试可以在任何包中。本质上,它们只是用于测试被测试类行为的独立类 这里最重要的问题是JUnit测试类的位置对于它们所属的项目来说是一个常量。也就是说,它们总是在同一个包中,或者在名为test的子包中,或者在一个单独的包中 我倾向于将JUnit测试类放在一个单独的包中,该包通过将顶级名称替换为“test”来定义,因此org.util.strings.StingUtil将有一个名为test.util.StringUtilTest的JUnit测试类
通过这种方式,很容易找到测试类,并且可以很容易地将它们分为library.jar和它们的test.jar。此外,您也不会冒JUnit测试无意中使用包级访问被测试类的风险;测试类必须使用与世界其他部分相同的接口。在我看来,专门用于测试支持的包级钩子是有害的,因此最好通过将测试放在别处来确保它们没有用处。这不是单元测试,这是功能/验收测试,不是单元测试,这是一个功能/验收测试,那么测试您想成为包级别的东西呢?包级别的访问是实现的一个受限部分,就像受保护的一样。如果在测试中需要包级别的访问,那么可以在JUnit testmethod中使用匿名子类来提供访问权限。+1用于重命名包中的顶级名称。我自己只是junit或htmlunit,这取决于测试基于哪种工具。那么测试您需要的东西呢
想要成为包级别吗?包级别访问是实现的受限部分,如受保护。如果在测试中需要包级别的访问,那么可以在JUnit testmethod中使用匿名子类来提供访问权限。+1用于重命名包中的顶级名称。我自己只是junit或htmlunit,这取决于测试基于哪个工具。