【发布时间】:2018-05-15 05:32:34
【问题描述】:
我有一个服务类,它启动一个线程并运行一些后台任务。在我运行单元测试时不应运行这些任务。服务类本身非常简单,不需要进行单元测试。就像:
@Service
public class BackgroundTaskService {
@PostConstruct
public void startTask() {
// ...
}
}
目前我正在设置一个系统属性来声明单元测试正在运行:
@RunWith(SpringRunner.class)
@SpringBootTest
public class SomeTest {
static {
System.setProperty("unit_testing", "true");
}
@Test
public void test() {}
}
然后我可以检查:
@PostConstruct
public void startTask() {
if (System.getProperty("unit_testing") != null) {
return; // skip background tasks
}
}
我想知道是否有更好的方法来做到这一点。
【问题讨论】:
-
你在
TestClass上使用了哪些注解来加载spring上下文 -
您可以通过
new myObject()手动实例化您的对象来避免调用@PostConstruct 方法,否则,如果您使用@Autowired,您的@PostConstruct方法将被调用。 -
似乎是个坏主意。请参阅此SO 线程,了解如何测试线程代码。
-
@HemantPatel 哦抱歉忘记了,现在添加。只是普通的 Spring Boot 和 JUnit 注释。
-
我会让它依赖于
test配置文件处于活动状态而不是自定义系统属性。
标签: java spring unit-testing