gpt4 book ai didi

java - Mockito - 在 When - ThenReturn 子句期间调用真实方法

转载 作者:行者123 更新时间:2023-12-01 19:42:58 25 4
gpt4 key购买 nike

考虑以下类(使用 CDI + 剪切 Restclient)

public class A {

@Inject
Restclient client;

public Object init(String token) {
String b = createB(token);
return c(b);
}

public String createB(String token)
return client.getB(token);
}

public Object c(String b) {
return new C(b);
}
}

我想模拟方法createB(token),因为我不想测试Rest Client。所以我做了以下事情:

public class TestA {

@Mock
A a;

@Test
public void testA() {
when (a.createB("123")).thenReturn("FakeB");

Object c = a.init("123");
assertNotNull(c); // Fails
}
}

由于某种原因,这个 JUnit 4 + Mockito 2.18 测试失败,因为“c”为 null,但我的方法工作正常(已经测试过它们)。

如果我对A使用@Spy,我会得到一个NPE,因为我的Restclient未初始化(即使我添加@Mock RestClient客户端)并且when(...).thenReturn(...)实际上调用了真实的方法...

不知道如何解决这个问题,即使感觉很简单......

最佳答案

如果您想在 stub 期间避免方法调用,请使用以下表示法:

doXxx(...).when(spyObject).method();

所以,在你的情况下,这会起作用:

public void test_a() {
...

doReturn("FakeB").when(restClient).getB("token"));
assertNotNull(a.init("token"))
}

关于java - Mockito - 在 When - ThenReturn 子句期间调用真实方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54636390/

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