JUnit:运行一个具有不同配置的测试

时间:2012-10-25 16:50:20

标签: java unit-testing testing junit

我有2种测试方法,我需要使用不同的配置运行它们

myTest() {
    .....
    .....
}

@Test
myTest_c1() {
    setConf1();
    myTest();
}

@Test
myTest_c2() {
    setConf2();
    myTest();
}

//------------------

nextTest() {
    .....
    .....
}

@Test
nextTest_c1() {
    setConf1();
    nextTest();
}

@Test
nextTest_c2() {
    setConf2();
    nextTest();
}

我无法从一个配置中运行它们(如下面的代码所示),因为我需要单独的方法来执行tosca。

@Test
tests_c1() {
    setConf1();
    myTest()
    nextTest();
}

我不想编写这两种方法来运行每个测试,我该如何解决?

首先我想写自定义注释

@Test
@RunWithBothConf
myTest() {
   ....
}

但也许还有其他解决方案吗?

4 个答案:

答案 0 :(得分:3)

如何使用Theories

@RunWith(Theories.class)
public class MyTest{

   private static enum Configs{
     C1, C2, C3;
   }

  @DataPoints
  public static Configs[] configValues = Configs.values();

  private void doConfig(Configs config){
    swich(config){...}
  }

  @Theory
  public void test1(Config config){
      doConfig(config);

      // rest of test
  }

  @Theory
  public void test2(Config config){
     doConfig(config);

      // rest of test
  }

不确定为什么要关闭格式化。

答案 1 :(得分:1)

以下是我将如何处理它:

  • 创建两个测试类
  • 第一个类配置为conf1但使用@Before属性触发设置
  • 第二个类扩展了第一个类但覆盖了configure方法

在下面的示例中,我有一个成员变量conf。如果没有运行任何配置,它将保持默认值0. setConf1现在是setConf类中的Conf1Test,它将此变量设置为1. setConf中的Conf2Test现在为public class Conf1Test { protected int conf = 0; @Before public void setConf() { conf = 1; } @Test public void myTest() { System.out.println("starting myTest; conf=" + conf); } @Test public void nextTest() { System.out.println("starting nextTest; conf=" + conf); } } } class。

这是主要的测试类:

public class Conf2Test extends Conf1Test
{
   // override setConf to do "setConf2" function
   public void setConf()
   {
      conf = 2;
   }
}

第二个测试类

starting myTest; conf=1
starting nextTest; conf=1
starting myTest; conf=2
starting nextTest; conf=2

当我配置IDE以运行包中的所有测试时,我得到以下输出:

conf1

我认为这会给你带来什么。每个测试只需编写一次。每个测试都会运行两次,一次使用conf2,一次使用{{1}}

答案 2 :(得分:1)

我在一堆测试用例中遇到了类似的问题,其中某些测试需要使用不同的配置运行。现在,你的情况下的'配置'可能更像设置,在这种情况下,这可能不是最好的选择,但对我来说它更像是一个部署模型,所以它适合。

  1. 创建一个包含测试的基类。
  2. 使用代表不同配置的基类扩展基类。
  3. 当您执行每个派生类时,基类中的测试将在其自己的类中使用配置设置运行。
  4. 要添加新测试,只需将它们添加到基类。

答案 3 :(得分:0)

你现在拥有它的方式对我来说似乎很好。您没有复制任何代码,每个测试都清晰易懂。