我很难将 spy bean 放入我的 ApplicationContext。我有一颗豆称为公用事业类型的工具:
@Component("utilities")
public class Utilities {
<snip>
/**
* Returns a random int. This is provided mostly for testing mock-ability
*
* @return a random integer
*/
public int getRandom() {
return (int) (Math.random() * Integer.MAX_VALUE);
}
}
它是在我的 Spring 集成流程间接引用的类中使用的。
然后我有这个木星测试:
@TestInstance(Lifecycle.PER_CLASS)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@ExtendWith(SpringExtension.class)
@ContextConfiguration( classes = {
XmlLocations.class,
VisitorManager.class,
Utilities.class,
UnixTimeChannel.class
})
@WebMvcTest
//@TestExecutionListeners( { MockitoTestExecutionListener.class })
public class FullIntegrationTest {
@Autowired
private MockMvc mvc;
@SpyBean
private Utilities utilities;
private ClientAndServer mockServer;
private static final int MOCK_SERVER_PORT = 9089;
@BeforeAll
public void setUpBeforeClass() {
Mockito.when(utilities.getRandom()).thenReturn(Integer.MAX_VALUE);
mockServer = ClientAndServer.startClientAndServer(MOCK_SERVER_PORT);
RestAssuredMockMvc.mockMvc(mvc);
(new MockServerPingInit()).initializeExpectations(mockServer);
(new MockServerFullIntegrationInit()).initializeExpectations(mockServer);
}
@Test
public void t00200_IncomingMessage() {
RestAssuredMockMvc.given()
.queryParam("example", "example")
.when()
.request("POST", "/api/v1/incoming")
.then()
.statusCode(equalTo(200));
}
<snip>
但是即使我创建了 spy bean 并在它上面使用了 when/thenReturn,它也不会漂浮到我的应用程序上下文中等待被调用并返回它的模拟随机值。
我知道utilities.getRandom() 方法被调用,因为我可以在它上面放置一个断点并调试测试,并且它命中了getRandom 方法,但是当我尝试添加一个如上所示的间谍bean 并模拟getRandom 时返回一个固定值来测试断点仍然命中,所以我可以告诉真正的方法不是正在调用模拟。
我试过将 when/thenReturn 也放在测试中,以防为时过早,但这无济于事。
显然我做错了什么,可能在概念上是错误的。呸!
四季花海
慕尼黑的夜晚无繁华
相关分类