2014-05-22 108 views
1

基本上我试图完成什么在C#的NUnit是非常简单的,但使用Java测试框架。如何将参数值直接传递给TestNG,JUnit或其他框架方法?

我希望在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文件中。当您有大量测试时,那么这将非常麻烦。

看来TestNG是最有希望的框架,但它具有整个“XML文件中的参数值”体系结构,这是非常糟糕的。

如果其他人会有这种结构,我愿意投入巫婆框架的努力。

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

回答

1

您提到的所有测试框架均允许在启动时加载属性,而不是参数。性质可以通过命令行被读取,从环境VARS,从属性文件等

TestNG的还允许参数,如

进口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

+0

哦,是的,我的观点是我希望参数*值*在注释中,而不是单独像TestNG这样的文件显然需要。在你发布的例子中,例如,我必须将参数值放在testng.xml中,与NUnit采用的方法相比,这非常麻烦。我很好奇这些框架是否可以以类似的方式工作,参数值在测试注释中,而不是在外部。 –

+1

我现在明白了。如果使用DataProvider,则可以在注释中使用参数。 http://testng.org/doc/documentation-main.html#parameters-dataproviders,但最常见的用法是通过属性文件,因为那时我们可以有一个环境驱动的测试。他们不是真正的注释,但你也可以使用@optional。例如:'public void testNonExistentParameter(@Optional(“mysql”)String db){...}' –

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运行),因此你有更强大的语法

相关问题