我正在使用PIT突变测试(1.6.7)和一个maven构建系统。有关于哪个测试杀死了突变体的信息。但是,我需要的是突变体是被JUnitAssert违反杀死的还是被任何隐式检查或运行时系统杀死的?PIT有可能吗?
w6mmgewl1#
如果你说的“隐式检查”是指编译时错误,那么在PIT下这是不可能的。不像一些早期的系统,它不会产生不可行的突变体。唯一可以杀死变异体的方法是在运行测试时抛出未捕获的异常。PIT不区分AssertionFailedErrors和其他类型的异常,因此不可能判断测试是失败还是出错。
b4wnujal2#
我在几年前实现了这样一个扩展,它可以区分Assert失败和隐式抛出的异常,尽管代码没有合并回Pitest。您仍然可以在此处找到分支:https://github.com/hcoles/pitest/compare/master...nrainer:pitest:features/categorizeTestFailure为了得到有意义的结果,你需要生成一个完整的变异矩阵(对于每个变异,执行覆盖它的所有测试,当第一个测试用例杀死变异时,不要停止)。这意味着变异的“杀死类型”取决于变异和测试用例。
2条答案
按热度按时间w6mmgewl1#
如果你说的“隐式检查”是指编译时错误,那么在PIT下这是不可能的。不像一些早期的系统,它不会产生不可行的突变体。
唯一可以杀死变异体的方法是在运行测试时抛出未捕获的异常。PIT不区分AssertionFailedErrors和其他类型的异常,因此不可能判断测试是失败还是出错。
b4wnujal2#
我在几年前实现了这样一个扩展,它可以区分Assert失败和隐式抛出的异常,尽管代码没有合并回Pitest。
您仍然可以在此处找到分支:https://github.com/hcoles/pitest/compare/master...nrainer:pitest:features/categorizeTestFailure
为了得到有意义的结果,你需要生成一个完整的变异矩阵(对于每个变异,执行覆盖它的所有测试,当第一个测试用例杀死变异时,不要停止)。这意味着变异的“杀死类型”取决于变异和测试用例。