我有一个简单的FeignClient接口,我想用假的HTTP服务器“单元”/集成测试,例如WireMock。我们的想法是使用抽样的HTTP API响应测试映射,而不配置整个Spring Boot / Cloud Context 。
strcmp
有没有办法以编程方式实例化此接口,例如通过@FeignClient(name = "foo", url = "${foo.url}")
public interface FooClient {
@RequestMapping(value = "/foo/{foo-id}/bar", method = RequestMethod.GET)
public Bar getBar(@PathVariable("foo-id") String fooId);
}
的Spring Data Repository?
我在源代码中看到*RepositoryFactoryBean
,但它受包保护,并且依赖于FeignClientFactoryBean
对象来检索其依赖项。
答案 0 :(得分:0)
嗯,你 可以 伪造一个真正的休息客户端使用wiremock进行测试,但这更多的是包含功能测试,假装客户自己工作。这通常不是您真正想要测试的,因为实际需要是使用您的客户端以指定的方式测试您的组件。
对我而言,最好的做法是不要在维护虚假服务器时努力工作,而是用Mockito嘲笑客户行为。如果您使用Spring Boot 1.4.0,可以采用以下方法:
考虑您有一些FooBarService
,它在内部使用您的FooClient
来执行某些FooBarService::someAction(String fooId)
,这会执行一些业务逻辑,需要使用给定ID的foo
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
class FooUnitTest {
@Autowired;
private FooBarService fooBarService;
@MockBean;
private FooClient fooClient;
@Test
public void testService() {
given(fooClient.getBar("1")).willReturn(new Bar(...));
fooBarService.someAction("1");
//assert here, that someAction did what it supposed to do for that bar
}
}
此时,您首先应该澄清一下,当您要求“/ foo / 1 / bar”时,您希望REST客户端做出什么响应,通过为该情况创建一个模拟并给出您希望收到的Bar对象该API,并声明您的应用程序处于所需状态。