5

当 CodePro 自动为我的方法生成测试时,它通常会生成相同的测试:

/**
 * Run the String getCategoryID() method test.
 *
 * @throws Exception
 *
 * @generatedBy CodePro at 17/11/11 11:44 AM
 */
@Test
public void testGetCategoryID_1()
    throws Exception {
    Category fixture = new Category("");

    String result = fixture.getCategoryID();

    // add additional test code here
    // An unexpected exception was thrown in user code while executing this test:
    //    java.lang.NullPointerException
    //       at java.io.StringReader.<init>(StringReader.java:33)
    //       at xpath.XPathRunner.<init>(XPathRunner.java:23)
    //       at trademefacade.Category.retrieveCategoryID(Category.java:95)
    //       at trademefacade.Category.getCategoryID(Category.java:68)
    assertNotNull(result);
}

/**
 * Run the String getCategoryID() method test.
 *
 * @throws Exception
 *
 * @generatedBy CodePro at 17/11/11 11:44 AM
 */
@Test
public void testGetCategoryID_2()
    throws Exception {
    Category fixture = new Category("");

    String result = fixture.getCategoryID();

    // add additional test code here
    // An unexpected exception was thrown in user code while executing this test:
    //    java.lang.NullPointerException
    //       at java.io.StringReader.<init>(StringReader.java:33)
    //       at xpath.XPathRunner.<init>(XPathRunner.java:23)
    //       at trademefacade.Category.retrieveCategoryID(Category.java:95)
    //       at trademefacade.Category.getCategoryID(Category.java:68)
    assertNotNull(result);
}

这些是对以下方法的测试:

public String getCategoryID() throws IOException,
        NoCategoryMatchException {
    categoryID = retrieveCategoryID();
    if (categoryID.equals("")) {
        throw new NoCategoryMatchException();
    }
    return categoryID;
}

我使用 CodePro 错了吗?我认为多个测试是我实现两个测试的提示,但是每当我自定义测试时,它们只会在 CodePro 重新生成测试时被重写。

4

3 回答 3

2

我不太了解 CodePro,但看看JUnit 测试用例生成 - 执行

为了确定目标方法的预期结果,代码生成器执行该方法。CodePro > JUnit > Test Execution 首选项控制代码生成器在方法执行引发异常时的响应。

看起来您的代码正在由 CodePro 执行,但它抛出了 NullPointerException,可能是因为设置没有正确完成?

CodePro 正在生成两个测试用例,因为代码有两条路径通过它,但 NullPointerException 意味着没有生成不同的测试代码。

我不完全理解所涉及的所有机制,但尝试用只返回“”的方法替换retrieveCategoryId() 并重新生成测试。如果这有效,那么这就是问题所在。我不知道解决方案是什么。在 google codepro 的论坛上尝试。

于 2011-11-17T08:22:49.650 回答
0

如果您想自定义测试并防止它们被重写,请删除 @generatedBy 标记。这是对代码生成器的一个提示,它拥有该方法并且可以在需要时重写它。

于 2011-11-18T03:08:36.017 回答
0

可以有不止一种测试方法来测试您的一种方法。GooglePro 正在尝试为您的方法的参数生成不同的值,然后使用这些值的组合创建一个测试方法。

您可以(自动)生成工厂类来帮助 GooglePro 获取这些值。在您的情况下,如果它没有找到任何方法,它会使用字符串的 "" 值和 new Category("") 填充方法,因为您没有使用工厂类。

您可以在 window > preferences > codePro > Junit > Methods > Generate 中限制每个方法的测试方法数量最多

这里有更详细的信息。 JUnit 测试用例生成

于 2012-12-21T08:27:50.167 回答