我有一个带有自动元素(Spring)的Junit测试类的集合。如果我单独执行每个Junit测试类,一切正常。
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
public class TestClass {
@Autowired
MyController control;
@Test
public void geolocTest() throws Exception {
...
}
我想创建一个“测试套件”,但是如果我执行测试套件,看起来自动装配的元素是“空”,所以每次测试都会失败。
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestClass.class
})
public class TestSuit extends TestCase {
...
}
我该怎么办?感谢
注意: 我想要的是在所有测试类之前执行代码,在所有测试类之后执行另一个代码。我想我需要一个套房......
答案 0 :(得分:1)
如上所述,您应该使用:
@RunWith(SpringJUnit4ClassRunner.class)
你可以使用@ Before,@ After,@ ByClass,@ AfterClass。
前两个将在给定Test类中的每个测试用例之前和之后执行。
每个给定的Test类只执行一次最后两次。
您的测试应该尽可能原子化,因此如果所有测试用例都相互依赖于相同的数据或执行顺序,请尝试先重写它。
如果您希望共享一些应用程序属性,那么对于所有测试用例之间的自动连接(例如模拟的URL),请查看Spring配置文件。
然后,您可以根据当前配置文件生成特定于生产和测试的属性。
看一下示例和官方文档:
http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html
http://www.mkyong.com/spring/spring-profiles-example/
@Configuration
@ComponentScan
@Profile("test")
@PropertySource(value = "classpath:/yourApp.properties")
public class TestConfiguration {
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
然后,您可以从测试类中的文件中注入共享属性,如下所示:
@Value("${mock.url}")
private String mockUrl;
答案 1 :(得分:0)
您至少缺少以下
@RunWith(SpringJUnit4ClassRunner.class)
在你的TestClass上。