Java 如何将参数值直接传递到TestNG、JUnit或其他框架方法中?

Java 如何将参数值直接传递到TestNG、JUnit或其他框架方法中?,java,unit-testing,testing,junit,testng,Java,Unit Testing,Testing,Junit,Testng,基本上,我正在尝试实现C#的NUnit中的功能,它非常简单,但使用Java测试框架 我想在Java中完成的任务在C#的Nunit中是这样的: 在本例中,我编写了一个测试方法并使用注释来定义参数值,这些值只需要与测试方法参数匹配。然后为每个TestCase注释调用它,每次使用一组不同的参数值。这比必须用参数名注释测试并将值放入外部XML文件中要实际得多数据提供程序s则在进行大量测试时非常麻烦 TestNG似乎是最有前途的框架,但它拥有整个“xml文件中的参数值”体系结构,这太糟糕了 如果其他人有这

基本上,我正在尝试实现C#的NUnit中的功能,它非常简单,但使用Java测试框架

我想在Java中完成的任务在C#的Nunit中是这样的:

在本例中,我编写了一个测试方法并使用注释来定义参数值,这些值只需要与测试方法参数匹配。然后为每个TestCase注释调用它,每次使用一组不同的参数值。这比必须用参数名注释测试并将值放入外部XML文件中要实际得多<代码>数据提供程序s则在进行大量测试时非常麻烦

TestNG似乎是最有前途的框架,但它拥有整个“xml文件中的参数值”体系结构,这太糟糕了

如果其他人有这样的结构,我愿意努力改变框架


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

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

TestNG还允许参数,例如

导入org.testng.annotations.Parameters; 导入org.testng.annotations.Test

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

看看:

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

@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中是否有类似的东西,但使用扫描当前测试方法注释的自定义数据提供程序实现它相当容易


你也可以查一下。它让您可以在groovy中编写测试(并作为junit运行),因此您有更强大的语法

哦,是的,我的观点是,我希望参数值在注释中,而不是在TestNG显然需要的单独文件中。在您发布的示例中,我必须将参数值放在testng.xml中,例如,与NUnit采用的方法相比,这是非常麻烦的。我很好奇这些框架是否能以类似的方式工作,参数值在测试注释中,而不是在外部。我现在明白了。如果使用数据提供程序,则可以在注释中使用参数,但最常见的用法是通过属性文件,因为这样我们就可以进行环境驱动的测试。它们不是真正的注释,但您也可以使用@optional。例如:
public void testnoexistentparameter(@Optional(“mysql”)String db){…}
@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)   );
}