简介
UTA 可以使用代码中可用的工厂方法在测试生成期间创建对象。需要在 Javadoc 中将单个方法标记为工厂方法(请参阅标记工厂方法),这样 UTA 就能发现这些方法并在创建测试时使用它们初始化对象。
您可以配置 UTA 以自动发现您标记的工厂方法,或者手动指示 UTA 在项目中搜索这些方法(请参阅扫描工厂方法)。
标记工厂方法
您可以在公共非内部类中标记公共静态方法。方法必须返回不包含有界类型参数的复杂类型。您可以通过以下方式之一标记方法:
- 手动将 @jtest.factory 标记添加到方法的 Javadoc 注释中
在编辑器中选择一个方法,然后使用单元测试助手界面中的标记工厂方法操作;这会自动将 @jtest.factory 标记添加到所选方法的 Javadoc 注释中,并在工厂方法视图中更新标记的方法。
EclipseIntelliJ
在以下示例中,标记了 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 扫描您的代码以检测标记的工厂方法。
从 IDE 菜单栏选择 Parasoft> 显示视图> 工厂方法打开视图。
在 Package Explorer 中选择项目。
UTA 不会扫描在 Project Explorer 或导航器中选择的项目。
- 点击工厂方法菜单中的扫描工作区域或者扫描选定的项目按钮,开始扫描特定项目或整个工作空间中的工厂方法:
使用工厂方法
当您使用以下选项之一时,将在测试生成期间自动使用被 UTA 发现并在工厂方法视图中显示的工厂方法:
- 在单元测试助手视图中使用工厂实例化。该操作在所选类型可以使用相关的工厂方法时显示。
- 如果需要初始化的类型可以使用相关的工厂方法,在单元测试助手视图或上下文菜单中(请参阅创建测试套件)添加测试用例。如果一个特定类型有多个工厂方法可用,UTA 将优先考虑返回类型与正在初始化的变量类型最匹配的工厂方法。UTA 也会优先选择同一个包或最接近的父包中的工厂方法。