gpt4 book ai didi

java - piTest 删除了对 "forEach"的调用 SURVIVED

转载 作者:行者123 更新时间:2023-11-30 10:25:06 25 4
gpt4 key购买 nike

TL;DR 我认为突变应该被杀死,但它幸存了下来。我正在寻找它发生的原因以及如何解决这两件事:(1)超时(2)突变幸存。

详细信息 我有一个 spring 网络应用程序,正在使用 testng 进行测试。我已经提取了代码的相关部分。如果我在提取该问题的代码时引入了任何问题,请原谅。我有一个通过的测试用例,它验证 callFunction 被调用了 8 次。这是使用 verify(a, atLeast(8)).called(); 验证的 在看到 piTest 报告后,似乎如果 callFunction 被删除,函数仍然有a.called(); 8 次...这是意想不到的。

我已经通过从源代码中删除 callFunction 进行了检查,但测试用例确实失败了。请参阅 Modified1 Rat.java 部分。

我还通过删除 forEach 进行了检查,测试用例确实失败了。参见 Modified2 Rat.java

还有一件更有趣的事情,当我只更改 Rat.java 中文本的(格式)位置时,如 Modified3 Rat.java 中所示piTest 报告的 部分已更改。

Type.java

package lab.rat;

public class Type {
}

Action.java

package lab.rat; 
import org.springframework.stereotype.Component;

@Component public class Action {
public void called() {}
}

Rat.java

package lab.rat; 
import java.util.HashMap;
import java.util.Map;
import java.util.stream.IntStream;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component public class Rat {
@Autowired private Action a;

public void testee() {
Map<Type, Integer> properties = new HashMap<>();
IntStream
.range(0, 8)
.forEach(index -> properties.put(new Type(), index));

properties
.entrySet()
.stream()

注意下一行

            .forEach(entry -> callFunction()); // removed call to lab/rat/Rat::callFunction ? TIMED_OUT 
// removed call to java/util/stream/Stream::forEach ? SURVIVED
}
private void callFunction() {
a.called();
}
}

RatTest.java

package lab.rat; 
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.verify;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import lab.rat.config.SpringConfigurationForTest;

public class RatTest extends SpringConfigurationForTest {

@InjectMocks Rat rat;
@Mock Action a;

@BeforeMethod public void setup() {
MockitoAnnotations.initMocks(this);
}

@Test public void testTestee() {
rat.testee();
verify(a, atLeast(8)).called();
}
}

Modified1 Rat.java -- 测试失败

.stream() 
.forEach(entry -> {});

Modified2 Rat.java -- 测试失败

.stream(); 

Modified3 Rat.java -- 又创建了一个突变

.stream() 
.forEach( // removed call to java/util/stream/Stream::forEach ? SURVIVED
// removed call to lab/rat/Rat::callFunction ? TIMED_OUT

entry -> callFunction() // replaced return of integer sized value with (x == 0 ? 1 : 0) ? KILLED

);

最佳答案

多年后,但似乎没有人提到 (Spring) @Component 和 (Mockito) @InjectMocks 是互斥的解决方案。您有多个生成的 Rat 子类在起作用,所以 PIT 只是对发生的事情感到困惑。它可能变异错了。

关于java - piTest 删除了对 "forEach"的调用 SURVIVED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46386599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com