2012-01-31 129 views
2

我有一个类,其中一个公共方法非常适合参数化测试。另外,我在阅读您通常在测试用例(具有带@Test注释方法的多个方法的类)和项目中的类之间保持对应关系。是否有可能使用Parameterized.class和JUnitCore.class作为跑步者?现在,如果使用参数化I无法解决如何在同一个测试用例中设置方法 的非参数化测试。我曾考虑过创建一个套件,然后包含 参数化测试和“常规”测试,但是似乎为了使测试用例的名称有意义,我必须将测试用例的名称绑定到方法的名称而不是包含似乎是标准方法的方法。使用JUnit参数化测试

例如

public class MyClass { 

    public int methodSuitableForParameterizedTest(int m){ 
     // Implementation 
    } 

    public int methodForRegularTest(int m) { 
     // Implmentation 
    } 
} 

我还可以有一个单一的测试用例TestMyclass包含第一方法的paremeterized测试以及该第二非参数化测试?

+0

请记住,使用参数化测试时,无论是构造,也阵列方法的集合/列表都通过反射调用,因而不会从测试套件被称为类。 Reflection允许单元测试类通过使用静态收集方法构建测试用例来调用它自己的构造函数。 – djangofan 2012-02-22 22:28:58

回答

2

这很难做到,它涉及到创建你自己的跑步者这两个工作,所以我只是坚持两个类的解决方案,一个参数化测试和一个没有。

问题有两方面,一是类和构造函数的注解。对于参数化测试,您需要@RunWith(Parameterized.class)和一个带参数的构造函数。对于标准测试,构造函数没有参数。而JUnit检查一个特定的类只有一个构造函数。你可以通过创建另一个跑步者来做到这一点,但这并不简单。

我会建议在这种情况下有两个测试类。

+0

感谢您的建议。只是恼人的不能保持每个类结构的一个测试用例。 – 2012-01-31 15:09:00

+1

对于TestNG的数据提供者来说,这是微不足道的,它允许你在一个类中拥有尽可能多的参数化测试方法和数据提供者,但是它也将这些参数直接传递给你的测试方法。 http://testng.org – 2012-01-31 18:00:01

+0

谢谢塞德里克。这可能是我在TestNG上最后一次点头,因为我相信自己应该从JUnit开始。 – 2012-02-02 09:35:53

1

最近我开始zohhak项目。它可以让你写:

@TestWith({ 
    "25 USD", 
    "38 GBP", 
    "null" 
}) 
public void testMethod(Money money) { 
    ... 
} 
+0

我喜欢zohhak,但宁愿使用Spock。甚至更简单。 – 2014-07-22 23:17:45