假设我有以下方法应该进行测试:
@Autowired
private RoutingService routingservice;
public void methodToBeTested() {
Object objectToRoute = initializeObjectToRoute();
if (someConditions) {
routingService.routeInOneWay(objectToRoute);
} else {
routingService.routeInAnotherWay(objectToRoute);
}
}
在这种情况下,
RoutingService
在单独的线程中运行,因此在其构造函数中,我们具有以下内容:Thread thread = new Thread(this);
thread.setDaemon(true);
thread.start();
问题是
RoutingService
更改了objectToRoute
的状态,而这正是我要检查的内容,但这不会立即发生,因此测试失败。但是,如果我添加Thread.sleep()
则可以,但是据我所知,这是一种不好的做法。在这种情况下,如何避免
Thread.sleep()
? 最佳答案
如果要测试methodToBeTested
方法的[单元测试],则应仅模拟routingservice
。
您不应该测试methodToBeTested
调用的任何方法。
但是,听起来您想测试RoutingService
(您说“问题是RoutingService
更改了objectToRoute
的状态,而这正是我要检查的内容”)。
要测试RoutingService
方法,您应该为这些方法编写单独的单元测试。