本主题介绍如何配置单元测试助手。
章节目录:
选择 Parasoft> 首选项> 单元测试助手可以配置 UTA 常规选项。
使用此选项可以指定保存通过 UTA 创建的测试的根目录。默认情况下选择“[基于项目配置]”选项,该选项将读取项目的设置以明确测试应该保存在哪里。如果项目没有指定测试所在的位置,则需更新项目配置以指定测试源文件夹,切换至一个预定义模式,或者使用以下变量手动创建模式:
${project_name}
- 包含被测类的项目(IntelliJ 的模块)的名称。${source_folder}
- 包含项目源文件的文件夹的名称。
使用此选项可以为测试指定包和类名模式。默认模式“${package_name}.${class_name}${test_kind}Test”会将测试放在与被测类相同的包中,并在类名中添加“${test_kind}test”后缀。还可以使用以下变量指定自定义模式:
${class_name}
- 被测类的名称。${package_name}
- 包含被测试类的包的名称。${test_kind}
- 测试类型的名称,将添加到文件名中。该变量可以取以下值:
- Spring
- 在 JUnit 4 和 5 中将 Spring 测试与其他测试分开。
- Parameterized
- 在 JUnit 4 中将参数化测试与常规测试分开。在 JUnit 5 中,常规测试用例和参数化测试用例被添加到同一个文件中。
对于非 Spring 测试或非参数化测试,${test_kind}
变量会解析为空字符串。
使用此选项可以指定 UTA 用于创建新测试的测试框架。可以选择 JUnit 4 或 JUnit 5。
使用此选项可以为私有方法创建单元测试。启用后:
此选项允许为使用创建单元测试选项创建的测试套件指定执行时间限制(以毫秒为单位)。如果超过该时间限制,测试执行将会停止,测试套件将会失败,错误相关的信息将作为建议显示在 UTA 界面中。请参阅创建测试套件。
启用此选项后,UTA 在创建基本测试用例时会自动将断言模板作为注释生成到代码中。详细信息,请参阅创建基本单元测试。
当使用创建测试套件选项创建测试套件时,此选项不适用。 |
启用此选项后,在批量创建期间仅添加增加覆盖率的测试用例(请参阅为多个文件创建测试套件)。
此选项允许使用 AI 优化 UTA 通过创建测试套件选项生成的失败测试。(UTA 可能会创建一定数量的失败测试,这些测试虽然失败了,但仍能提供一些覆盖率。在此步骤中,UTA 能利用 AI 更新失败的测试,使其通过。)要使用该功能,必须先在 Parasoft 首选项中配置 LLM 提供者(请参阅配置 LLM 提供者设置)。
此功能依赖于 LLM,生成的信息可能不准确。 |
启用此选项后,UTA 将会:
详细信息,请参阅配置工厂方法。
启用此选项后,UTA 将显示用于创建参数化测试用例的操作链接。请参阅创建参数化单元测试。
参数化测试依赖于您在新测试的测试框架选项下配置的测试框架:
当使用创建测试套件选项创建测试套件时,此选项不适用。 |
在高级设置中可以配置用于创建参数化测试用例的输入数据。
此选项指定为一个测试用例创建的包含参数变体的最大行数。
此选项指定测试用例的保存位置。可以从下拉菜单中选择 Code(默认)或 CSV。
|
这组选项允许通过从选择类型下拉菜单中选择数据类型,并添加、编辑或删除列表中的值,来自定义默认值列表。通过查找字段可以轻松找到某个特定值。
添加新值时,字符必须与用于保存文件的字符编码匹配,从而确保文件正确生成。 |
启用此选项后,UTA 将显示用于创建 Spring 测试用例的操作链接。请参阅创建 Spring 单元测试。
当使用创建测试套件选项创建测试套件时,此选项不适用。 |
此选项用于指定创建 Spring 测试时要包含在 ContextConfiguration 注解中的属性。请参阅使用 ContextConfiguration 注解配置 Spring 测试。
配置 UTA 执行监控器选项可以指定在测试执行期间收集数据的限制。此外,为了防止超出限制,您可以指定在使用 UTA 执行测试时不进行监控的包和类。
选择 Parasoft> 首选项> 单元测试助手> 执行监控器可以配置 UTA 的执行监控器选项。
此选项用于指定要从监控器中排除的包和类的列表。点击新建并提供相应包或类的限定名称(不支持通配符)。
这一组选项可以指定在执行期间收集数据的限制:
选择 Parasoft> 首选项> 单元测试助手> 模拟可以配置 UTA 的模拟选项。
此选项在测试创建期间启用或禁用模拟对象,以及在测试执行后显示模拟建议。
此选项用于启用或禁用使用辅助方法。启用后,生成的测试类将把常规测试方法与用于准备对象但不进行断言的辅助方法分开。
从 2022.1 版本开始,静态方法和构造函数模拟使用 Mockito 创建。要使用此功能,您需要更新项目,以包含支持静态方法和构造函数模拟的 Mockito 版本。如果您想继续将 Powermock 和 Mockito 用于手写模拟,推荐使用 Mockito 的 3.12.4 版本。任何使用 PowerMock 并在 2022.1 版本之前通过 Jtest 或手动创建的测试都可能需要更新,以避免测试失败;请参阅使用 mockito-inline 运行 PowerMock 时测试失败该怎么办? |
此选项用于启用或禁用静态方法和构造函数模拟。启用后,UTA 会自动为所有必需的可模拟静态方法和/或构造函数创建模拟。UTA 将在测试创建期间自动将静态模拟添加到测试用例中,或者在测试运行后显示能够帮助您添加模拟的建议(请参阅创建模拟)。mockStatic()
方法将用于模拟类的静态方法。有关 mockStatic() 方法的详细信息,请参阅 mockStatic。
启用此选项后,批量创建时间可能会增加,覆盖率结果将取决于您的具体项目。 |
要从静态模拟中排除某些方法和/或构造函数,可将它们添加到要从静态模拟中排除的方法和构造函数表中。如果需要 UTA 模拟特定的已排除方法和/或构造函数,则将它们添加到要包含的静态方法和构造函数 (覆盖排除项) 表中。之后,UTA 将会模拟与表中指定模式匹配的方法。
点击新建添加新方法或模式。使用限定方法名和通配符(*)来匹配模式。以 .*
或 <init>
结尾的模式将与构造函数匹配。
在以下示例中,将从模拟中排除以下配置:
DAO
类的所有静态方法和构造函数。InternalUtil
类的所有方法。但是,examples.powermock.InternalUtil.createConnection
方法仍然会被模拟。
您可以指定 UTA 在测试执行后显示的建议类型。
选择 Parasoft> 首选项> 单元测试助手 > 建议可以配置 UTA 建议选项。
您可以启用或禁用以下建议类型:
有关 UTA 显示的建议示例,请参阅使用单元测试助手执行单元测试。
您可以使用测试模板控制测试类的结构,以指定特定测试所需的通用配置。例如,您可以添加设置方法或从基类继承。
如果测试模板引发编译错误,则可能不会生成测试。控制台中将显示一条消息,指示生成文件中的错误。 |
选择 Parasoft> 首选项> 单元测试助手 > 测试模板可以配置 UTA 测试模板选项。
编辑模板
编辑模板对话框用于创建/编辑模板。
必须在编辑模板对话框中配置以下内容:
可以识别以下变量:
以下示例展示了常见类配置的实现。
常见基类继承:
import com.company.BaseTestClass; public class ${testClassName} extends BaseTestClass { } |
为静态模拟添加 setup/teardown 方法:
import org.junit.jupiter.api.*; import static org.mockito.Mockito.*; import java.util.*; public class ${testClassName} { Set<ScopedMock> staticMocks = new HashSet<>(); @BeforeEach public void setup() { var mocked = mockStatic(MyUtilClass.class); staticMocks.add(mocked); mockUtil.when(MyUtilClass::getUserName).thenReturn("testUser"); } @AfterEach public void teardown() { staticMocks.forEach(i -> i.close()); staticMocks.clear(); } } |
可以识别以下变量:
${methodSignature}
- 被测方法的名称,包括参数类型。例如:calc(int, int, String)
${qualifiedMethodSignature}
- 被测方法的完全限定名称,包括参数类型。例如:com.company.MyClass#calc(int, int, String)
此变量适合在 Javadoc 的 @see 标签中使用。
${author}
- DTP 设置中指定的用户名。
${testAnnotations}
(必填)- 要添加到测试方法中的自动生成注解的占位符。例如,JUnit 测试需要 @Test 注解。可以在此变量之前或之后添加自定义注解。
${testName}
(必填)- 自动生成的测试方法名称。
${testBody}
(必填)- 用于自动生成语句的占位符,构成测试的主体部分。可以在此变量之前或之后添加自定义代码,以包含在所有生成的测试中。
testName}
变量,或者改为将代码添加到类模板中。以下示例展示了一个定义和配置字段的类和方法模板。
类模板
public class ${testClassName} { private CustomField customField = null; } |
方法模板
${testAnnotations} public void ${testName}() throws Exception { customField = new CustomField(42, "Testing example"); customField.init(); ${testBody} } |