用Java测试布尔型变异

用Java测试布尔型变异,java,mutation-testing,pitest,Java,Mutation Testing,Pitest,我几乎没有Java方面的经验,我面临着一些问题 我有一个看起来像下面的代码,目标是杀死它的所有变异 公共类MyClass{ 受保护的布尔值=false; 公共MyClass(){ 某物=真实; } 布尔isSomething(){ 归还某物; } } 我的测试代码如下所示 tester=MyClass(); assertTrue(tester.isSomething()); 通过在Eclipse上使用pitest运行它,它将生成以下突变(所有突变都与return something语句相关)

我几乎没有Java方面的经验,我面临着一些问题

我有一个看起来像下面的代码,目标是杀死它的所有变异

公共类MyClass{
受保护的布尔值=false;
公共MyClass(){
某物=真实;
}
布尔isSomething(){
归还某物;
}
}
我的测试代码如下所示

tester=MyClass();
assertTrue(tester.isSomething());
通过在Eclipse上使用pitest运行它,它将生成以下突变(所有突变都与
return something
语句相关):

  • 将1替换为0
  • 删除了对成员变量的赋值
  • 将1替换为0
  • 将1替换为-1
  • 将1替换为-1
  • 用2代替1
  • 将1替换为0

  • 不幸的是,我不能杀死这4个和5个突变,这两个突变都是用-1代替1的。有什么办法可以杀死他们吗?

    这里有一些问题

    首先,您希望启用一些正在生成垃圾突变的实验/研究突变运算符。如果坚持使用默认设置,则不会发生这种情况

    与jvm级别一样,布尔表示为0/1的整数。只有以下突变才有意义

    • 将1替换为0
    • 删除了对成员变量的赋值
    (请注意,尽管在这种情况下突变是有意义的,但成员分配的删除在默认情况下是禁用的,因为它可以产生等效的突变)

    您没有提供完整的上下文,因此不清楚重复的1/0替换是重复的还是不同的

    要杀死这些突变体,有两种方法。首先去除冗余代码

    公共类MyClass{
    受保护的布尔值=真;
    布尔isSomething(){
    归还某物;
    }
    }
    
    这在功能上等同于原始代码,但数量较少

    其次,你需要测试

    既然您已将
    某物
    设置为受保护的,我假设
    MyClass
    有子类?如果它不这样做,那么代码可以进一步减少到

    公共类MyClass{
    布尔isSomething(){
    返回true;
    }
    }
    
    你只能写一个测试

    assertThat(newmyclass().isSomething()).isTrue();
    

    如果存在子类,那么您需要测试来检查setup
    something
    是否为true,然后断言
    isSomething
    返回true,另一个将其设置为false并断言该方法返回false。

    这里有一些问题

    首先,您希望启用一些正在生成垃圾突变的实验/研究突变运算符。如果坚持使用默认设置,则不会发生这种情况

    与jvm级别一样,布尔表示为0/1的整数。只有以下突变才有意义

    • 将1替换为0
    • 删除了对成员变量的赋值
    (请注意,尽管在这种情况下突变是有意义的,但成员分配的删除在默认情况下是禁用的,因为它可以产生等效的突变)

    您没有提供完整的上下文,因此不清楚重复的1/0替换是重复的还是不同的

    要杀死这些突变体,有两种方法。首先去除冗余代码

    公共类MyClass{
    受保护的布尔值=真;
    布尔isSomething(){
    归还某物;
    }
    }
    
    这在功能上等同于原始代码,但数量较少

    其次,你需要测试

    既然您已将
    某物
    设置为受保护的,我假设
    MyClass
    有子类?如果它不这样做,那么代码可以进一步减少到

    公共类MyClass{
    布尔isSomething(){
    返回true;
    }
    }
    
    你只能写一个测试

    assertThat(newmyclass().isSomething()).isTrue();
    

    如果存在子类,那么您需要进行测试,检查setup
    something
    是否为true,然后断言
    isSomething
    返回true,另一个将其设置为false并断言方法返回false。

    我无法坚持PIT的默认配置,因为我需要使用提供给我的那个。这些都是重复的,我真的不知道为什么会这样。我的测试用例中出现了一些RUN_错误,对吗?还有一件事我忘了提:我不允许对源代码进行更改。我不能坚持PIT的默认配置,因为我需要使用提供给我的配置。这些都是重复的,我真的不知道为什么会这样。我在测试用例中遇到了一些RUN_错误,这是正确的吗?另一件我忘记提到的事情:我不允许对源代码进行更改。