【问题标题】:Mutation killing突变杀戮
【发布时间】:2017-02-28 12:37:25
【问题描述】:

我被困在 1 点,需要建议。

在为我的代码编写 junit 时,我无法杀死 ValidateArgument.notNull(arg1) 突变!!!
需要建议。

代码如下..

public class A{

  public void method1(Object B){

          ValidateArgument.notNull(B);
          ..
          ..
          ..
  }
}

得到

## 删除调用 com/nokia/oss/configurator/rac/common/util/ValidateArgument::notNull → 幸存下来

因为返回类型是void 有什么可能的方法来杀死这个突变?

【问题讨论】:

  • 提示:变量名称采用驼峰命名法,即使它们只是一个字符和示例代码 ;-)
  • 鉴于您对我的回答的评论......它变得更加复杂。因此,您要做的第一件事是:转到帮助中心阅读“如何提问”。你看,你是在告诉我们有些东西不起作用。但你没有提供任何相关细节。比如:您使用的是什么工具,哪个版本......长话短说:如果您希望我们提供帮助,您应该在您的问题中提供一个最小、完整且可行的示例 - 以便人们有机会了解您的设置在哪里被破坏.照原样,您的问题无法得到回答。
  • 提示:如果 other 段代码可以被杀死;也许您必须研究那里的差异。
  • @GhostCat 好的,我明白了。我正在使用 eclipse-jee-mars-2-win32-x86_64 和 PIT 工具进行突变测试。还为您提供了我正在使用的测试用例和方法.所以我想你回答我的问题就足够了。!!!!!!!!!!!!
  • 我建议:看看你是否可以用尽可能少的代码重现这种行为。你看,你只是概述你的测试代码;你只展示了一个测试用例。我会说:去做一些实验,尽可能少做几行。然后,您还可以联系提供该工具的人员。我相信他们也有支持论坛。

标签: java junit4 mutation-testing pitest


【解决方案1】:

ValidateArgument.notNull(B); 的目的是什么?

我们从您的测试中知道,它在传递 null 时会抛出 NullPointerException,这就是您关心的全部吗?

如果是这样,您应该删除那行代码,因为它没有用 - 当您调用 method1 时,您仍然会收到 NullPointerException。即您的测试指定的行为是相同的。

或者ValidateArgument.notNull 对你来说还有其他重要的事情吗?也许它会生成一条您认为有用的异常消息?如果是这样,您需要编写一个测试来确认该消息存在。

但是,许多程序员不会编写指定诸如此类的断言行为的测试(这样做是否有意义将取决于您正在工作的上下文/域)。

Pitest 具有一项功能,可让您避免在通常不经过单元测试的关注点中创建突变(另一个常见的问题是日志记录)。

如果您将 full.package.name.ValidateArgument 添加到 AvoidCallsTo 配置参数中,则不会再产生此突变。

【讨论】:

  • 感谢您的 cmets。我使用了 ValidateArgument.notNull(B);以避免不必要地执行我的代码。如果有人在这种情况下使用 null 调用我的方法,而不是执行代码并等待将给我 NullPointerException 的行我的代码只会在开始时给我异常,并将节省我的处理时间。这是我使用它的唯一原因。
【解决方案2】:

猜测:您是否有一个测试可以调用 B 的 null 方法?

您看到,很可能,当 B 为 null 时,验证方法应该抛出异常。当您从不使用 null 测试方法时,是否真的执行了这一行并没有什么区别!

【讨论】:

  • 是的,我有一个使用 null 调用该方法的测试。我的测试用例是:-
  • @Test(expected=NullPointerException.class) public void testForvalidation(){ testObject.method1(null); } 但我仍然无法杀死突变。
  • 如果注释掉 ValidateArgument.notNull(B); 测试是否失败?行吗?
  • 似乎即使您手动删除 ValidateArgument.notNull(B) 您仍然会在稍后的方法中收到 NullPointerException。
  • @Boris 是的,我检查了代码,发现即使在删除 ValidateArgument.notNull(B) 之后,我仍然从使用 B 的行中得到“NullPointerException”。那么有什么办法可以杀死这个突变..?
猜你喜欢
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 2018-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多