Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何以编程方式为TestNG创建测试?_Java_Automation_Testng - Fatal编程技术网

Java 如何以编程方式为TestNG创建测试?

Java 如何以编程方式为TestNG创建测试?,java,automation,testng,Java,Automation,Testng,我正在编写一个库来为我的JPA@Entity类自动生成单元测试。简而言之:用户提供字段->值对的多重映射,我的库为它们生成测试 示例测试数据: lastName -> some name, some other name firstName -> some first name, some other first name 假设我有一个包含测试的类: public class PersonTest { @Test public void personNotValid

我正在编写一个库来为我的JPA
@Entity
类自动生成单元测试。简而言之:用户提供字段->值对的多重映射,我的库为它们生成测试

示例测试数据:

lastName -> some name, some other name
firstName -> some first name, some other first name
假设我有一个包含测试的类:

public class PersonTest
{
    @Test
    public void personNotValidNullLastname() {
        // ...
    }

    @Test
    public void personNotValidTooLongLastname() {
        // ...
    }

    @Test
    public void personNotValidDateofbirth() {
        // ...
    }

    @Test
    public void personValidAddressType() {
       // ...
    }
    // ...
}
如果我执行这些测试,我会从TestNG控制台获得一些不错的输出:

PASSED: personNotValidDateofbirth
PASSED: personNotValidNullLastname
PASSED: personNotValidTooLongLastname
PASSED: personValidAddressType
现在我想动态创建一些测试。如果我使用
@Factory
注释的方法如下:

@Factory
public Object[] generateTests() {
    // ...
}
此工厂创建自定义类的实例:

public class EntityFieldTest
{
    // ...

    @Test
    public void doTest()
    {
        testMethod.run(VALIDATOR, entityClass, field, value);
    }
}

// Note that testMethod is an anonymous function parametrized elsewhere
它将运行我生成的所有测试,但输出没有太多说明:

PASSED: doTest
PASSED: doTest
PASSED: doTest
PASSED: doTest

如何执行我的测试方法以获得更详细的结果,如
PersonTest

使
EntityFieldTest
实现并覆盖。您提到您正在工厂内创建
EntityFieldTest
的实例,因此请提供一个
EntityFieldTest
构造函数,该构造函数接受表示该测试名称的字符串。然后在
getTestName()
中返回该值。您可以创建自定义记录器:并生成您喜欢的报告。

看起来您可能应该使用一些验证程序类。希望确保已经创建了核心测试是个好主意,但是除了提供存根之外的任何精力都最好放在实际验证属性状态的类中。

您检查过了吗

它将为您提供为测试用例提供数据的选项。您还可以从文件中读取测试用例输入并将其传递给测试函数。每个@Test方法都需要用@Dataprovider(name=…[class=…]注释

所以你的个人着装类型应该是

@Test(dataProvider = "validAddressType", dataProviderClass = TestCaseData.class)
public void personValidAddressType(TestCase testCase) {...}
在TestCaseData中

@DataProvider(name = "validAddressType")
public static Iterator<Object[]> getTestCases() {
    //returns your test case
}
@DataProvider(name=“validAddressType”)
公共静态迭代器getTestCases(){
//返回您的测试用例
}
上面提到的链接中的示例在类似的场景中对我很有帮助。您还可以使用dataprovider返回对象[],而不是迭代器