Java 防止junit测试运行两次

Java 防止junit测试运行两次,java,junit,playframework,Java,Junit,Playframework,有许多类似于我的问题,但没有明确的答案! 我的测试失败了,因为它们只在套件中运行了一次,也只运行了一次。我只需要在套房里运行一次。 这是我的套房: @RunWith(Suite.class) @Suite.SuiteClasses({Test1.class, Test2.class}) { ..... } 我正在使用命令test从命令行运行测试 有人找到了解决方案吗?我使用以下设置运行JUnit、parallel测试,它们只运行一次: @RunWith(ParallelSuite.class)

有许多类似于我的问题,但没有明确的答案! 我的测试失败了,因为它们只在套件中运行了一次,也只运行了一次。我只需要在套房里运行一次。 这是我的套房:

@RunWith(Suite.class)
@Suite.SuiteClasses({Test1.class, Test2.class})
{
.....
}
我正在使用命令
test
从命令行运行测试


有人找到了解决方案吗?

我使用以下设置运行JUnit、parallel测试,它们只运行一次:

@RunWith(ParallelSuite.class)
@SuiteClasses({ Test1.class, Test2.class })
public class AllTests {

}
我有一个ParallelSuite.class:

package tests;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

import org.junit.internal.runners.*;
import org.junit.runners.Suite;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.RunnerBuilder;
import org.junit.runners.model.RunnerScheduler;

public class ParallelSuite extends Suite {
    public ParallelSuite(Class<?> klass, RunnerBuilder builder) throws InitializationError  {

        super(klass, builder);

        setScheduler(new RunnerScheduler() {

            private final ExecutorService service = Executors.newFixedThreadPool(4);

            public void schedule(Runnable childStatement) {
                service.submit(childStatement);
            }

            public void finished() {
                try {
                    service.shutdown();
                    service.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
                } catch (InterruptedException e) {
                    e.printStackTrace(System.err);
                }
            }
        });
    }
}
包测试;
导入java.util.concurrent.ExecutorService;
导入java.util.concurrent.Executors;
导入java.util.concurrent.TimeUnit;
导入org.junit.internal.runners.*;
导入org.junit.runners.Suite;
导入org.junit.runners.model.InitializationError;
导入org.junit.runners.model.RunnerBuilder;
导入org.junit.runners.model.RunnerScheduler;
公共类并行套件扩展套件{
public ParallelSuite(类klass,RunnerBuilder)引发初始化错误{
超级(克拉斯,建筑商);
setScheduler(新的RunnerScheduler(){
私有最终执行器服务=Executors.newFixedThreadPool(4);
公共作废明细表(可运行的儿童声明){
服务。提交(儿童声明);
}
公开作废已完成(){
试一试{
service.shutdown();
服务终止(长最大值,时间单位纳秒);
}捕捉(中断异常e){
e、 printStackTrace(System.err);
}
}
});
}
}

我使用以下设置使用JUnit、parallel运行测试,它们只运行一次:

@RunWith(ParallelSuite.class)
@SuiteClasses({ Test1.class, Test2.class })
public class AllTests {

}
我有一个ParallelSuite.class:

package tests;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

import org.junit.internal.runners.*;
import org.junit.runners.Suite;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.RunnerBuilder;
import org.junit.runners.model.RunnerScheduler;

public class ParallelSuite extends Suite {
    public ParallelSuite(Class<?> klass, RunnerBuilder builder) throws InitializationError  {

        super(klass, builder);

        setScheduler(new RunnerScheduler() {

            private final ExecutorService service = Executors.newFixedThreadPool(4);

            public void schedule(Runnable childStatement) {
                service.submit(childStatement);
            }

            public void finished() {
                try {
                    service.shutdown();
                    service.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
                } catch (InterruptedException e) {
                    e.printStackTrace(System.err);
                }
            }
        });
    }
}
包测试;
导入java.util.concurrent.ExecutorService;
导入java.util.concurrent.Executors;
导入java.util.concurrent.TimeUnit;
导入org.junit.internal.runners.*;
导入org.junit.runners.Suite;
导入org.junit.runners.model.InitializationError;
导入org.junit.runners.model.RunnerBuilder;
导入org.junit.runners.model.RunnerScheduler;
公共类并行套件扩展套件{
public ParallelSuite(类klass,RunnerBuilder)引发初始化错误{
超级(克拉斯,建筑商);
setScheduler(新的RunnerScheduler(){
私有最终执行器服务=Executors.newFixedThreadPool(4);
公共作废明细表(可运行的儿童声明){
服务。提交(儿童声明);
}
公开作废已完成(){
试一试{
service.shutdown();
服务终止(长最大值,时间单位纳秒);
}捕捉(中断异常e){
e、 printStackTrace(System.err);
}
}
});
}
}

您是否使用maven来运行测试?是的,运行两次可能会很烦人/很慢,但它们一定不会失败。如果只运行一次是成功运行的必要条件,那么测试结构就有问题—运行两次就有问题。第二个是独立运行的。没有套房,也就是说没有@beforeClass和AfterClass。这就是它失败的原因!您是否可以将套件重构为一个ExternalResource实现,然后将其作为类规则包含在每个套件中?您是否使用maven来运行测试?是的,运行两次可能会很烦人/很慢,它们一定不会失败。如果只运行一次是成功运行的必要条件,那么测试结构就有问题—运行两次就有问题。第二个是独立运行的。没有套房,也就是说没有@beforeClass和AfterClass。这就是它失败的原因!能否将套件重构为一个ExternalResource实现,然后将其作为类规则包含在每个套件中?