当突变应该使用具有自动注入场的方法时,突变未被杀死
2022-09-04 23:33:15
						我有以下几点:
public class UnsetProperty extends Command {
    @Resource
    private SetProperty setProperty;
    public String parse(String[] args) {
        if (args.length != 4) {
            throw new RuntimeException("Incorrect number of arguments. Expected 4. Got " + args.length);
        }
        String publisher = args[0];
        String version = args[1];
        String mode = args[2];
        String property = args[3];
        /*
         * Unsetting a property is done by changing the current property to null.
         * Technically, the old property doesn't get changed, a new one is inserted with
         * a higher revision number, and it becomes the canonical one.
        */
        setProperty.setProperty(publisher, version, mode, property, null, false);
        return "";
    }
}
和以下测试:
public class UnsetPropertyTest extends CommandTest {
    @Configuration
    public static class Config {
        @Bean(name = "mockSetProperty")
        public SetProperty getSetProperty() {
            return mock(SetProperty.class);
        }
        @Bean
        public UnsetProperty getUnsetProperty() {
            return new UnsetProperty();
        }
    }
    @Resource
    @InjectMocks
    private UnsetProperty unsetProperty;
    @Resource(name = "mockSetProperty")
    private SetProperty setProperty;
    // ... SNIP ...
    @Test
    public void testCallsSetPropertyWithCorrectParameters() throws SQLException, TaboolaException {
        final String[] args = new String[]{"publisher", "version", "mode", "property"};
        final String output = unsetProperty.parse(args);
        verify(setProperty).setProperty("publisher", "version", "mode", "property", null, false);
        // The above line should have killed the mutation!
        verifyNoMoreInteractions(setProperty);
        assertThat(output).isEqualTo("");
    }
}
测试按预期通过。当我通过PIT运行它时,我得到以下结果
33   1. removed call to my/package/SetProperty::setProperty → SURVIVED
第 33 行在类代码中突出显示。
检查的测试如下:
- 
my.package.UnsetPropertyTest.testCallsSetPropertyWithCorrectParameters(my.package.UnsetPropertyTest)(32毫秒) - 
my.package.UnsetPropertyTest.testUnsetThrowsForIncorrectNumberOfParameters(my.package.UnsetPropertyTest)(3 毫秒) 
现在:
- 当我更改测试调用参数()时,测试失败。不出所料
args - 当我更改断言 () 参数时,测试失败。不出所料。
verify(setProperty).setProperty(...) - 当我手动注释掉第一个代码块中突出显示的函数调用时,测试失败。
 
为什么突变会存活下来?
我使用的是Java 8,Mockito 1.9.5和PIT 1.1.4。