我尝试使用RestAssured测试Jersey REST服务端点,同时模拟其依赖关系。我使用Spring自动装配端点,并在执行测试之前设置了模拟依赖项。但是,当RestAssured调用该服务时,它会再次重新自动装配,并且我的模拟将替换为真正的实现。我该如何预防?
我使用的是Spring Boot,Jersey,EasyMock和RestAssured。
我的端点类:
@Component
@Path("foo")
@Produces(MediaType.TEXT_PLAIN)
public class FooEndpoint {
private FooService service;
@GET
@Produces({MediaType.TEXT_PLAIN})
public String get() {
return service.getFoo();
}
@Autowired
public void setService(FooService service) {
System.out.println(String.format("<<< Endpoint %s. Setting service %s", this, service));
this.service = service;
}
}
FooService接口:
@Service
public class FooService {
public String getFoo() {
return "real foo";
}
}
测试:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = {Application.class}, webEnvironment = WebEnvironment.RANDOM_PORT)
public class FooEndpointIT {
@LocalServerPort
private int port;
@Autowired
private FooEndpoint target;
private FooService serviceMock;
@Test
public void testGet() {
RestAssured.port = port;
String expected = "mock foo";
serviceMock = EasyMock.strictMock(FooService.class);
target.setService(serviceMock);
EasyMock.expect(serviceMock.getFoo()).andReturn(expected);
EasyMock.replay(serviceMock);
String actual = RestAssured.get("foo").body().asString();
System.out.println(actual);
assertEquals("mock foo", actual); // Fails: expected:<[mock] foo> but was:<[real] foo>
}
}
在日志中我看到了:
&LT;&LT;&LT;端点com.foo.foo.FooEndpoint@6972c30a。设置服务com.foo.foo.FooService@57a48985
。 。 。 Tomcat初始化并启动。 。点。
&LT;&LT;&LT;端点com.foo.foo.FooEndpoint@6972c30a。为com.foo.foo.FooService类设置服务EasyMock &LT;&LT;&LT;端点com.foo.foo.FooEndpoint@6972c30a。设置服务com.foo.foo.FooService@57a48985
真实的foo
在设置模拟后,如何防止FooEndpoint重新自动装入?