如何在Defects4J中为指定故障测试用例自定义输入?
给Defects4J故障测试用例添加自定义输入的步骤
1. 定位目标测试类
Defects4J项目的测试代码默认放在src/test/java目录下,根据你执行defects4j test后得到的失败测试函数名,找到对应的测试类文件(路径对应包结构)。比如失败测试是testCalculate,就找包含这个方法的CalculateTest.java。
2. 修改测试方法添加自定义输入
直接打开找到的测试类文件,通过两种方式加入自定义输入:
方式1:在原有测试方法中追加输入
比如原测试代码:
@Test public void testCalculate() { int result = calculator.calculate(10); assertEquals(20, result); }
修改为:
@Test public void testCalculate() { // 原有测试输入 int result1 = calculator.calculate(10); assertEquals(20, result1); // 自定义输入1:边界值 int result2 = calculator.calculate(0); assertEquals(0, result2); // 自定义输入2:负数 int result3 = calculator.calculate(-5); assertEquals(-10, result3); }
方式2:新增独立测试方法
如果不想改动原有测试,新增一个@Test方法专门测试自定义输入:
@Test public void testCalculateCustomInputs() { // 批量自定义输入 int[] testInputs = {1, 50, -100, Integer.MAX_VALUE}; for (int input : testInputs) { assertEquals(input * 2, calculator.calculate(input)); } }
3. 编译修改后的测试代码
运行以下命令编译测试类(比全量编译更高效):
defects4j compile -t
4. 运行特定测试验证结果
用defects4j test -t命令指定要运行的测试类和方法,避免运行所有测试浪费时间:
# 运行单个测试方法 defects4j test -t com.example.CalculateTest::testCalculate # 运行新增的自定义测试方法 defects4j test -t com.example.CalculateTest::testCalculateCustomInputs
观察输出结果,就能判断该故障是仅在特定输入下失败,还是所有输入都会失败。
5. 恢复原测试类(可选)
如果之后需要还原修改的测试文件,用git命令即可:
git checkout src/test/java/com/example/CalculateTest.java
内容的提问来源于stack exchange,提问作者erfoon
相关产品推荐
相关产品推荐

