2

我正在编写一个库来为我的 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

4

4 回答 4

3

使EntityFieldTest 实现org.testng.ITest和覆盖getTestName()。您提到您正在EntityFieldTest工厂内部创建实例,因此请提供一个EntityFieldTest构造函数,该构造函数接受代表该测试名称的字符串。然后在中返回该值getTestName()

于 2013-01-28T15:40:03.863 回答
0

您可以创建自定义记录器: http: //testng.org/doc/documentation-main.html#logging并生成您喜欢的报告。

于 2013-01-28T15:41:17.223 回答
0

看起来也许您应该改用一些验证器类。确保已经创建了核心测试是个好主意,但是除了提供存根之外,最好将任何精力投入到实际验证属性状态的类中。

于 2013-01-28T16:02:51.207 回答
0

你检查过DataProviders吗?

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

所以你的 personValidAddressType 看起来像

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

在 TestCaseData 中,

@DataProvider(name = "validAddressType")
public static Iterator<Object[]> getTestCases() {
    //returns your test case
}

提到的链接中的示例在类似情况下对我有帮助。您还可以让数据提供者返回 Object[][] 而不是迭代器

于 2013-01-28T23:40:40.217 回答