2012-09-08 16 views
2

我不记得如何使用JUnit3 TestSuite和一些谷歌搜索后发现此应该如何使用JUnit3 TestSuite?

public class MyTestsuite extends TestSuite { 
    public static Test suite() { 
     final TestSuite s = new TestSuite(); 
     s.addTestSuite(Test1.class); 
     s.addTestSuite(Test2.class); 
     return s; 
    } 
} 

看来工作,但看起来很奇怪的对我说:

  • 我为什么要创建一个新的实例当在一个合适的班级?
  • 人们应该如何发现这一点?在javadoc中没有什么像“写一个静态方法叫做套件”。
  • 为什么不是这样简单:

 

public class MyTestsuite extends AbstractTestSuite { 
    @Override 
    public void suite() { 
     add(Test1.class); 
     add(Test2.class); 
    } 
} 

基本上,我很好奇,如果我在第一个例子做它像真的要走的路。此外,我想知道这样的接口背后可能有什么设计决定。


这个工作也和也许是少了几分诡异:

public class MyTestsuite extends TestSuite { 
    MyTestsuite() { 
     super(Test1.class, Test2.class); 
    } 
    public static Test suite() { 
     return new TestSuite(); 
    } 
} 

回答

3

如果要编写测试套件和类是指他们的第一个例子中使用。

第二个示例不遵循用于定义套件的JUnit 3模式,如JUnit 3 cookbook中讨论的,讨论方法的使用,TestRunner使用该方法。

TestRunner类也discusses its use in its Javadocs

如果该类[一个Test类]定义了一个静态suite方法将被调用和返回的测试运行。

+0

我的第二个例子是指“如何恕我直言,应该像”,不喜欢它是在使用构造只存在在JUnit(扩展的类是不存在的'AbstractTestSuite') 。 – maaartinus

+0

@maaartinus哦。那么,那不是这样。你在问为什么最初的设计师做到了这一点,而不是另一种?你可能需要问他们。 –

+0

我真的怀疑他们是否知道这件事,看起来像是在重聚派对之后唤醒我的时候,我可以“发明”的东西。 – maaartinus

1

在第一个例子是更好地回报套房子MyTestsuite,而不是一个junit.framework.TestSuite,这样当一个人点击该套件在IDE中看到这个类和不代码junit.framework.TestSuite

public class MyTestsuite extends TestSuite { 
    public static Test suite() { 
     final MyTestsuite s = new MyTestsuite(); 
     s.addTestSuite(Test1.class); 
     s.addTestSuite(Test2.class); 
     return s; 
    } 
} 

你的第三个例子不起作用,因为返回的套件是空的,这里一个必须返回套件子类。作为边注,3.8.2

public class MyTestsuite extends TestSuite { 
    MyTestsuite() { 
     super(new Class[]{Test1.class, Test2.class}); 
    } 
    public static Test suite() { 
     return new MyTestsuite(); 
    } 
} 
相关问题