简介

UTA 可以使用代码中可用的工厂方法在测试生成期间创建对象。需要在 Javadoc 中将单个方法标记为工厂方法(请参阅标记工厂方法),这样 UTA 就能发现这些方法并在创建测试时使用它们初始化对象。

您可以配置 UTA 以自动发现您标记的工厂方法,或者手动指示 UTA 在项目中搜索这些方法(请参阅扫描工厂方法)。

标记工厂方法

您可以在公共非内部类中标记公共静态方法。方法必须返回不包含有界类型参数的复杂类型。您可以通过以下方式之一标记方法:

  • 手动将 @jtest.factory 标记添加到方法的 Javadoc 注释中
  • 在编辑器中选择一个方法,然后使用单元测试助手界面中的标记工厂方法操作;这会自动将 @jtest.factory 标记添加到所选方法的 Javadoc 注释中,并在工厂方法视图中更新标记的方法。

    Eclipse

    IntelliJ

在以下示例中,标记了 createMyObject 方法:

public class MyObjectFactory {
    /**
     * @jtest.factory
     */
    public static MyObject createMyObject(int param) {
        return new MyObject(param);
    }
}

如果未标记该方法,UTA 不会在测试创建期间使用它,myObject 将初始化为 null:

@Test
public void testMyMethodUnderTest() throws Throwable {
    // When
    MyObject myObject = null;
    String results = myMethodUnderTest(myObject);

    // Then
    // assertEquals("", results);
}

如果标记该方法,UTA 将在测试期间使用它创建对象,代码如下所示:

@Test
public void testMyMethodUnderTest() throws Throwable {
    // When
    int param = 0;
    MyObject myObject = MyObjectFactory.createMyObject(param);
    String results = myMethodUnderTest(myObject);

    // Then
    // assertEquals("", results);
}

标记的工厂方法与使用该方法的测试必须在同一个项目中。

如果想要 UTA 使用另一个项目中标记的工厂方法,则需要在生成测试的项目中创建一个新的方法,将其标记为工厂方法,并指向要使用的外部工厂方法:

public class TestUtil {
    /**
     * @jtest.factory
    */
    public static MyObject createMyObject() {
        return MyObjectFactory.createMyObject(3);
    }
}

取消标记工厂方法

您可以通过以下方式之一从 Javadoc 删除 @jtest.factory 标记:

  • 从 Javadoc 中手动删除标记,
  • 在编辑器中选择一个已标记的方法,然后使用单元测试助手界面中的取消标记工厂方法操作;该操作将自动更新 Javadoc,并从工厂方法视图中移除该方法。

           
  • 右键点击工厂方法视图中的方法,选择取消标记工厂方法选项;这会自动更新 Javadoc,并从工厂方法视图中删除该方法。


    如果选择一个或多个类、包或项目,选择取消标记工厂方法选项将删除所选内容中的所有 @jtest.factory 标记。

扫描工厂方法

通过启用自动发现标记的工厂方法选项,可以配置 UTA 自动扫描所有项目中标记的工厂方法;请参阅配置首选项。启用此选项后,UTA 将在 IDE 启动时自动扫描您的项目,并在工厂方法视图中显示发现的工厂方法:

修改项目后(例如创建或保存 Java 文件,或者创建或删除新项目)视图会自动更新。

或者,您可以手动指示 UTA 扫描您的代码以检测标记的工厂方法。

  1. 从 IDE 菜单栏选择 Parasoft> 显示视图> 工厂方法打开视图。

  2. 在 Package Explorer 中选择项目。

    UTA 不会扫描在 Project Explorer 或导航器中选择的项目。

  3. 点击工厂方法菜单中的扫描工作区域或者扫描选定的项目按钮,开始扫描特定项目或整个工作空间中的工厂方法:


使用工厂方法

当您使用以下选项之一时,将在测试生成期间自动使用被 UTA 发现并在工厂方法视图中显示的工厂方法:

  • 在单元测试助手视图中使用工厂实例化。该操作在所选类型可以使用相关的工厂方法时显示。
  • 如果需要初始化的类型可以使用相关的工厂方法,在单元测试助手视图或上下文菜单中(请参阅创建测试套件添加测试用例。如果一个特定类型有多个工厂方法可用,UTA 将优先考虑返回类型与正在初始化的变量类型最匹配的工厂方法。UTA 也会优先选择同一个包或最接近的父包中的工厂方法。


  • No labels