gpt4 book ai didi

java - Mockito 不是在 mock 电话

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:56:04 25 4
gpt4 key购买 nike

我正在测试的功能之一是通过 sshing 进入一台机器。我想模拟 ping 方法,它实际上试图通过 ssh 进入一台机器,因为我并不是真的通过 ssh 进入一台机器。

我正在测试的类:

public class TestMachine {
public int ping(host){
}

public boolean machineIsGood(host) {
blah blah
int val = ping(host);
blah blah blah
if(val != 0) return false;
return true;
}
}

测试类是这样的:

public class TestClass {
public void setUp() {
TestMachine tester = spy(new TestMachine());
}

public void testOne() {
when(test.ping(anyString()).thenReturn(-1);
assertFalse(tester.machineIsGood("testHost"));
}
{

问题是,当我在本地运行它们时,它们工作得很好,但在我们的自动构建系统上,它似乎实际上是在调用真正的 ping 并获得身份验证异常。我将使用 mock() 而不是 spy() 因为我读到它有点奇怪,但我只是不明白是什么不同,因为它实际上是在调用方法!只是想知道是否还有其他人有任何见解。

最佳答案

根据我的经验,您不应该使用模拟来测试同一类中方法之间的交互。

这告诉我们的是,您应该将 SUT(被测系统)与您需要用测试替身替换的外部依赖项分离(您不想在单元测试中“真正”调用的 ping ).


public class Pinger {
public int ping(String host) {
// yadda yadda
}
}

public class TestMachine {

private final Pinger pinger;

public TestMachine(final Pinger pinger) {
this.pinger = pinger;
}

public boolean machineIsGood(host) {
// blah blah
int val = pinger.ping(host);
// blah blah blah
return val == 0;
}
}

public class TestMachineTest {
@Test
public void testOne() {
final Pinger pinger = mock(Pinger.class);
when(pinger.ping(anyString())).thenReturn(-1);

TestMachine tester = new TestMachine(pinger);
assertFalse(tester.machineIsGood("testHost"));
}
}

HTH

关于java - Mockito 不是在 mock 电话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4819620/

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