Java Jenkins是否等待由当前测试启动的线程终止以启动另一个测试?
我有一个代码,它以Java Jenkins是否等待由当前测试启动的线程终止以启动另一个测试?,java,multithreading,unit-testing,jenkins,Java,Multithreading,Unit Testing,Jenkins,我有一个代码,它以TimerTask-s的形式调度和运行线程 Jenkins控制着它运行的测试序列——在一个测试单元返回之前不会运行另一个测试 然而,Jenkins是否以类似的方式控制从测试内部开始的线程 我们的测试失败了,这是我能想到的唯一原因 另一方面,集成/构建环境具有严格的控制——启动一个测试, 等待处理器清除它启动的每个线程,然后继续进行下一个测试 TIAJUnit测试用例在主线程终止时终止。如果您计划运行TimerTasks,您的测试将不会等待它们完成,除非您成功,这可能是您的问题。
TimerTask
-s的形式调度和运行线程
Jenkins控制着它运行的测试序列——在一个测试单元返回之前不会运行另一个测试
然而,Jenkins是否以类似的方式控制从测试内部开始的线程
我们的测试失败了,这是我能想到的唯一原因
另一方面,集成/构建环境具有严格的控制——启动一个测试,
等待处理器清除它启动的每个线程,然后继续进行下一个测试
TIAJUnit测试用例在主线程终止时终止。如果您计划运行TimerTasks,您的测试将不会等待它们完成,除非您成功,这可能是您的问题。您可以使主线程等待,例如使用闩锁:
public class TimerThreadTest {
final static int NUM_THREADS = 5;
final CountDownLatch latch = new CountDownLatch(NUM_THREADS);
@Test
public void threadTest() throws InterruptedException {
System.out.println("Starting");
Timer timer = new Timer(true);
for (int i = 0; i < NUM_THREADS; i++){
final int threadNo = i;
TimerTask tt = new TimerTask() {
@Override
public void run() {
latch.countDown();
System.out.println("thread " + threadNo + " done");
}
};
timer.schedule(tt, 1000);
}
latch.await();
System.out.println("Main thread done");
}
}
公共类时间读取测试{
最终静态int NUM_线程数=5;
最终倒计时闩锁=新倒计时闩锁(NUM_线程);
@试验
public void threadTest()引发InterruptedException{
System.out.println(“启动”);
定时器=新定时器(真);
对于(inti=0;i
当您的测试在Jenkins之外运行时,例如在您的IDE中运行时,是否正确运行?这些是JUnit测试吗?JUnit测试在主线程终止时终止,我可以想象,不管它们是由Jenkins还是从命令行运行。你有一个可以分享的示例测试吗?代码分散到太多的类,无法在这里组织一个示例。每个测试都很好——逻辑并不复杂。他们在Eclipse上运行得很好。在我提交代码后开始获取错误。所有JUnit测试。你会遇到什么样的错误?这是不够的信息。例如,就在上周,我的单元测试在hudson下运行时失败了,而我的IDE(Netbeans)中一切都正常。结果证明,原因是hudson对每个构建都进行了彻底的签出,并且从目录中读取所有输入文件和测试数据的测试以不同的顺序执行测试(最旧的文件首先在netbeans中运行,字母顺序第一在hudson中,因为签出顺序是这样的)。真正的问题是没有在每个文件之后正确地重置状态。很容易修复,但很难追踪。@Axel-清洁启动符合我的测试逻辑。这是线的重叠。但是谢谢你提供更多有用的信息。