【问题标题】:How to add test suite dynamically in junit 4.10如何在junit 4.10中动态添加测试套件
【发布时间】:2012-06-19 12:28:32
【问题描述】:

我想知道是否有任何方法可以在 junit 4 中动态添加测试套件。

例如,我有一个如下所述的 TestClassA,其中包含测试用例“test1”

class TestClassA 
{
    @Test
    public void test1()
    {
        createTestClassDynamically(); // this creates a test class having
                        // setUp(), tearDown() methods and one test case .
    }
}

测试用例 test1 有一个方法 createTestClassDynamically(),它动态地创建一个新的测试类(比如说 TestClassB),它有 setUp()、tearDown() 方法和一个测试用例(比如说 test2())。

我想运行 test1,然后当动态生成 TestClassB 时,我还希望执行测试用例“test2”。

我知道这很复杂,而且不是最好的做法,但在我的框架中,我需要这样做以动态生成大量测试类,而不是将它们物理地放在包中。 任何人都可以提供任何帮助/建议吗?

【问题讨论】:

  • 为什么需要动态生成java?
  • 我需要从一个类模板生成 100 个类,然后将这些类添加到当前正在运行的套件中,以便执行其中的测试用例。在 junit 3.8 的早期版本中,我们曾经使用 suite.addTestSuite(dynamicClassHere); 将测试添加到全局套件变量中。但是在 junit 4.10 中,当我尝试这种方式时,我得到了 ConcurrentModificationException。

标签: junit junit4


【解决方案1】:

我已经解决了这是我的框架,使用 Junit 4 的参数化功能有助于执行具有不同参数的相同测试用例。
下面提到的是我如何实现它的示例代码,如果它对任何人有帮助,请发布它。
另外,如果有人有更好的解决方案,请随时发布。

class TestClassA 
{

  private TestClassB classBObj;

  public TestClassA(TestClassB obj) {
   classBObj= obj;
  }

@Test
public void test1()
{
// createTestClassDynamically(); // remove this method as Parameterized 
                // feature will take care of dynamic test execution.
}

@Test
public void test2()
{
 // Test case from Test class B using TestClassB object (classBObj)

}

public static Collection<Object[]> getParameters() {
  Collection<Object[]> parameteres = new ArrayList<Object[]>();

  Object[] obj1 = new Object[]{new TestClassB()};
  Object[] obj2 = new Object[]{new TestClassB()};

  parameteres.add(obj1);
  parameteres.add(obj2);

  // ....... add more test data this way or create a loop

  return parameteres;
   }
}

【讨论】:

    猜你喜欢
    • 2013-11-04
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    相关资源
    最近更新 更多