如何防止RestAssured通过实际实现覆盖模拟?

时间:2016-08-25 12:24:49

标签: java spring-boot jersey easymock rest-assured

我尝试使用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重新自动装入?

0 个答案:

没有答案