2016-01-12 162 views
1

我的问题有很多类似的问题,但没有明确的答案! 我的测试失败了,因为它们在套件内运行一次,一次只能运行一次。我需要他们在套房内只运行一次。 这是我的套房:防止运行两次junit测试

@RunWith(Suite.class) 
@Suite.SuiteClasses({Test1.class, Test2.class}) 
{ 
..... 
} 

我运行命令行测试使用命令test

有没有人找到解决方案?

+0

你使用maven运行测试 –

+0

没有。激活剂测试 – Soof

+2

虽然是的,但两次运行可能很烦人/慢,他们**不能失败**。如果只运行一次是成功运行的要求,那么运行两次的测试结构 – blgt

回答

0

我用下面的配置运行使用JUnit,平行试验,他们只运行一次:

@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); 
       } 
      } 
     }); 
    } 
} 
+0

我试了一下。但没有工作!同样的事情发生! – Soof