如何将参数值直接传递给TestNG,JUnit或其他框架方法?

时间:2014-05-22 16:53:55

标签: java unit-testing testing junit testng

基本上我试图用C#来完成NUnit非常简单,但是使用Java测试框架。

我想用Java实现的目标在C#的Nunit中会是这样的:

[Test]
[TestCase(ProcessTypes.A, "a", false, true, false), Category("Smoke")]
[TestCase(ProcessTypes.A, "A", false, false, true), Category("Functional")]
[TestCase(ProcessTypes.A, "*", false, false, false), Category("Functional")]
public void ProcessIsResponding(ProcessTypes ProcessType, string password, bool lengthPass, bool lowercasePass, bool uppercasePass) {
    ...
    // perform test using parameters
    ...
}

在这种情况下,我编写了一个测试方法并使用注释来定义参数值,这些值只需要匹配测试方法参数。然后,每次使用一组不同的参数值为每个TestCase注释调用它。这比使用参数名称注释测试并将值放在外部XML文件中更加实用...... DataProvider s当你进行大量测试时非常麻烦。

似乎TestNG是最有前途的框架,但它在xml文件中有整个"参数值"建筑,这很糟糕。

如果其他人有这种结构,我愿意投入巫术框架。

这可以通过其他任何Java测试框架来实现吗?

2 个答案:

答案 0 :(得分:1)

您提到的所有测试框架都允许在启动时加载属性,这可以用来代替参数。可以从命令行,环境变量,属性文件等中读取属性。

TestNG还允许参数,例如

import org.testng.annotations.Parameters; import org.testng.annotations.Test;

public class ParameterizedTest1 {
    @Test
    @Parameters("myName")
    public void parameterTest(String myName) {
        System.out.println("Parameterized value is : " + myName);
    }
}

看看:http://www.tutorialspoint.com/testng/testng_parameterized_test.htm

答案 1 :(得分:1)

在java注释中,您只能使用简单类型。在junit中,您可以使用zohhak进行参数化测试。它让你写的

@TestWith({
    "clerk,      45'000 USD, GOLD",
    "supervisor, 60'000 GBP, PLATINUM"
})
public void canAcceptDebit(Employee employee, Money money, ClientType clientType) {
    assertTrue(   employee.canAcceptDebit(money, clientType)   );
}

我不知道testNG中是否有类似的内容,但使用自定义数据提供程序扫描当前测试方法的注释相当容易实现

您还可以查看spock。它让你在groovy中编写测试(并将它们作为junit运行)因此你有更强大的语法