我们假设我有以下方法应该测试:
@Autowired
private RoutingService routingservice;
public void methodToBeTested() {
Object objectToRoute = initializeObjectToRoute();
if (someConditions) {
routingService.routeInOneWay(objectToRoute);
} else {
routingService.routeInAnotherWay(objectToRoute);
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下RoutingService,在单独的线程中运行,因此在它的构造函数中我们有以下内容:
Thread thread = new Thread(this);
thread.setDaemon(true);
thread.start();
Run Code Online (Sandbox Code Playgroud)
问题是RoutingService改变状态,objectToRoute这正是我想要检查的,但这不会立即发生,因此测试失败.但是,如果我添加Thread.sleep()然后它可以工作,但这是不好的做法,因为我知道.
Thread.sleep()在这种情况下我该如何避免?
我有一个摩卡单元测试套件.
当我在本地运行它们时,一切正常.当我在Jenkins CI服务器上运行它们时,它们有时会失败,有时会通过.
我只是无法重现他们失败的原因.什么可能导致这种行为?
在标题中,我想测试这样的方法:
public void startThread()
{
new Thread()
{
public void run()
{
myLongProcess();
}
}.start();
}
Run Code Online (Sandbox Code Playgroud)
编辑:通过评论判断我认为测试线程是否启动并不常见.所以我要调整问题......如果我的要求是100%的代码覆盖率,我是否需要测试该线程是否启动?如果是这样,我真的需要一个外部框架吗?