假设我有以下方法应该进行测试:

@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方法,您应该为这些方法编写单独的单元测试。

10-04 17:24