模拟UriInfo无法正常工作

时间:2016-10-12 17:22:46

标签: java spring unit-testing jersey mockito

我试图设置几个单元测试但是我坚持这个。 这是我的服务类:

@Component
@Scope("request")
@Path("/subscriber/{accNo}/case/")
public class ServiceRest {
        @Context
        private UriInfo uriInfo;
        @Autowired
        private ActivationCase actCase;

        @POST
        @Path("activation")
        public Response activate(@PathParam("accNo") String accNo, InputStream jSonInput) {

               Integer order = actCase.activateMethod(accNo);
               Link link = new Link("order", uriInfo.getBaseUriBuilder().path(OrderRest.class).path("" + order).build().toString(), "GET");
        }
}

这是我的测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/myapp-context.xml" })
@WebAppConfiguration
@Ignore
public class ServiceRestTest{
    @Autowired
    private ServiceRest restClient;
    @Autowired
    protected OrderServiceImpl orderService;


    @Test()
    public void testActivationCaseOK() {
        UriInfo uriInfo = Mockito.mock(UriInfo.class);
        UriBuilder uriBuilder = Mockito.mock(UriBuilder.class);
        Mockito.when(uriInfo.getBaseUriBuilder()).thenReturn(uriBuilder);           
        Mockito.when(orderService.readThings(Mockito.any(Acct.class))).
                       thenReturn(stuff);

        Mockito.when(orderService.maintainPlan(Mockito.any(Order.class))).
                       thenReturn(stuff2);
        Response response = restClient.activateMethod("111111114");
}

任何人都可以解释我为什么uriInfo为空? 模拟完成后,应该返回我的URIBuilder没有?

谢谢你的帮助

2 个答案:

答案 0 :(得分:1)

不幸的是,没有任何建议对我有用:/ 我必须做一个解决方法。

因此,为了完成这项工作,我将 @Context私有UriInfo uriInfo 移动为每个方法中的参数。

 public Response activate(@PathParam("accNo") String accNo, InputStream jSonInput, @Context UriInfo) {

在我的单元测试中:

    Mockito.when(uriInfo.getBaseUriBuilder()).thenReturn(uriBuilder);
    Mockito.when(uriBuilder.path(Mockito.anyString())).thenReturn(uriBuilder);
    Mockito.when(uriBuilder.build()).thenReturn(uri);
    Response response = restClient.activateMethod("111111114", uriInfo);

感谢您的反馈。我希望这可以帮助将来的某个人

答案 1 :(得分:0)

尝试添加此代码

@Before
public void setup() {
    MockitoAnnotations.initMocks(this);
}

(如果它仍为null,则考虑将Mockito.mock()更改为@Mock注释,如下所述:http://solutiondesign.com/blog/-/blogs/spring-and-mockito-happy-together