我正在运行一个带有大量测试的Spring Boot项目,我想使用扩展报告。我已经创建了TestExecutionListener
,并且在一项测试中使用了该设置。
我不想在所有测试中都复制相同的注释。
我需要在哪里设置TestExecutionListener
?如何?
是否可以在application.properties
中进行设置?
答案 0 :(得分:0)
spring-test
模块在其META-INF/spring.factories
属性文件中声明所有默认的TestExecutionListeners。
创建一个简单的Spring应用程序:
MyBean:
@Component
public class MyBean {
public void doSomething() {
System.out.println("-- in MyBean.doSomething() method --");
}
}
AppConfig:
@Configuration
@ComponentScan
public class AppConfig {
}
编写一个TestExecutionListener:
public class MyListener implements TestExecutionListener {
@Override
public void beforeTestClass(TestContext testContext) throws Exception {
System.out.println("MyListener.beforeTestClass()");
}
@Override
public void prepareTestInstance(TestContext testContext) throws Exception {
System.out.println("MyListener.prepareTestInstance()");
}
@Override
public void beforeTestMethod(TestContext testContext) throws Exception {
System.out.println("MyListener.beforeTestMethod()");
}
@Override
public void afterTestMethod(TestContext testContext) throws Exception {
System.out.println("MyListener.afterTestMethod()");
}
@Override
public void afterTestClass(TestContext testContext) throws Exception {
System.out.println("MyListener.afterTestClass");
}
}
编写JUnit测试:
可以通过@TestExecutionListeners
批注注册TextExecutionListener:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = AppConfig.class)
@TestExecutionListeners(value = {MyListener.class,
DependencyInjectionTestExecutionListener.class})
@TestPropertySource("/test.properties")
public class MyTests {
@Autowired
private MyBean myBean;
@Test
public void testDoSomething() {
myBean.doSomething();
}
}
详细信息:https://www.logicbig.com/tutorials/spring-framework/spring-core/test-execution-listener.html
编辑:
声明测试属性的来源
可以通过@TestPropertySource
的location或value属性来配置测试属性文件,如下例所示。
同时支持传统属性文件格式和基于XML的属性文件格式file-例如“ classpath:/com/example/test.properties
”或“ file:///path/to/file.xml
”。
每个路径将被解释为一个Spring资源。普通路径(例如“ test.properties”)将被视为相对于定义测试类的程序包的类路径资源。以斜杠开头的路径将被视为绝对类路径资源,例如:“ / org / example / test.xml”。将使用指定的资源协议加载引用URL的路径(例如,以classpath:,file:,http:等开头的路径)。不允许使用资源位置通配符(例如* /。properties):每个位置的值必须恰好等于一个.properties或.xml资源。
@ContextConfiguration
@TestPropertySource("/test.properties")
public class MyTests {
// class body...
}