Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无效问题:布尔值将整数值的返回替换为(x==0?1:0)→;幸存下来的_Java_Identity_Mutation Testing - Fatal编程技术网

Java 无效问题:布尔值将整数值的返回替换为(x==0?1:0)→;幸存下来的

Java 无效问题:布尔值将整数值的返回替换为(x==0?1:0)→;幸存下来的,java,identity,mutation-testing,Java,Identity,Mutation Testing,更新: 自从这个问题发布后,突变覆盖失败就消失了,可能是因为pit中的错误修复 所以这个问题现在是无效的。我不知道在这种情况下该怎么办。删除问题?把它留在这里 我正在使用pit进行突变测试。在一个非常简单的函数中有一个僵尸: public boolean isAuthenticated() { return true; } 它通过以下方式进行测试: assertEquals(true, isAuthenticated()); 但是我得到的错误将整数值的返回替换为(x==0?1:0)

更新: 自从这个问题发布后,突变覆盖失败就消失了,可能是因为pit中的错误修复

所以这个问题现在是无效的。我不知道在这种情况下该怎么办。删除问题?把它留在这里

我正在使用pit进行突变测试。在一个非常简单的函数中有一个僵尸:

public boolean isAuthenticated() {
    return true;
}
它通过以下方式进行测试:

 assertEquals(true, isAuthenticated());
但是我得到的错误
将整数值的返回替换为(x==0?1:0)→ 幸存

我确实尝试使用System.identityHashCode()检查标识,但没有帮助

有没有办法杀死这个僵尸?
如果没有,我如何才能关闭布尔值或这行代码的特定检查?

我认为错误没有揭示问题的根源,在我的情况下(很可能在任何情况下)不可能这样做

在我的例子中,我有一个对象列表,其中包含一个返回谓词的函数。因此,我使用stream对所有对象进行迭代,并过滤其中一个匹配谓词和另一个对象作为候选对象的对象。因此,就代码而言,我有:

  public List<ParkingSlot> getFreeParkingSlots(List<DepartmentParkingRule> ruleList, Employee candidate){
      return 
          ruleList.stream().
          .filter(j -> j.getPredicate().test(candidate)) // <-- here appeared the error *replaced return of integer sized value with (x == 0 ? 1 : 0) → SURVIVED*
          .map(t -> t.getFreeParkingSlots(candidate))
          .findFirst()
          .orElseThrow(new NotMatchedException(candidate));
  }
因此,错误
将整数值的返回替换为(x==0?1:0)→ 存活
表明发生了突变,最重要的是,这种突变没有导致我的测试失败

下次看到这个错误时,我将从整体上考虑对测试的影响,而不是具体的布尔函数

需要注意的是,上面的代码不是真实的,但对于说明如何解释错误和修改源代码的操作非常有用。改变测试可能有助于杀死该突变株,但这取决于每个病例


希望它能帮助别人。

对返回值的简单检查应该可以杀死这个变种,如果没有,那么您的项目中会发生其他事情。你能提供更多的细节吗?完整的测试,你正在使用的测试框架等等。同一类中的其他变种是否被杀死?你确定该方法中存在变异吗?我敢肯定,用整数resulties替换布尔值是没有意义的。是的,这是没有意义的。据我所知,你的案例是关于一种情况,一个意外的依赖行为被PIT“嘲笑为坏”。在生产代码没有依赖性的情况下,如何将其应用到我的案例中?我的代码几乎完全是复制的(调用生产方法时只缺少类引用)。@rpád Magosányi:不,这不是关于模拟依赖。它是关于如何解释错误以及解决错误所需的操作。在Github上提供您的错误的工作展示,我将帮助您解决它。测试:它不会使构建失败,因为该类有一个@InterfaceClass注释,但您可以在pit报告中找到它。@ÁrpádMagosányi在我删除需要java 7 tools.jar的xml doclet依赖项后,我无法复制它。它给了我100%的变异覆盖率。请在此处查看更改:。您可能会遇到配置/依赖性问题。
  public List<ParkingSlot> getFreeParkingSlots(List<DepartmentParkingRule>  ruleList,
                                                 Employee candidate){

      Optional<List<ParkingSlot>> parkingSlots = ruleList.stream().
           .filter(j -> j.getPredicate().test(candidate)) 
           .map(t -> t.getFreeParkingSlots(candidate))
           .reduce((anElement, otherElement) -> 
                    throw new DuplicateException());//reduce is executed when a possible false positive duplicate rule match

      if (parkingSlots.isPresent() && CollectionUtils.isNotEmpty(parkingSlots.get())){
         return parkingSlots.get();
      }else {
         throw new NotMatchedException(candidate);
      }
  }