我试图设置几个单元测试但是我坚持这个。 这是我的服务类:
@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没有?
谢谢你的帮助
答案 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)