【发布时间】:2015-09-24 17:36:31
【问题描述】:
我在模拟没有引用的方法的数据时遇到问题,例如 getMethod();不知道模拟框架如何知道它。下面是面临问题的代码,无法在我的代码中设置 HttpRequest 和 URIInfo。
是否可以绕过该方法。
Class A {
private HttpServletRequest httpRequest;
private UriInfo uriInfo;
public HttpServletRequest getReq() {
return httpRequest;
}
public void setReq(HttpServletRequest req) {
this.httpRequest = req;
}
public UriInfo getUriInfo() {
return uriInfo;
}
public void setUriInfo(UriInfo uriInfo) {
this.uriInfo = uriInfo;
}}
class B extends A {
// some code
}
class C extends B {
protected Object executeCall(Object beIn) throws Exception{
prepareUpdateConfigurationRequest();
// some other methods.
return "";
}
private void prepareUpdateConfigurationRequest() {
implPutCustomerProductOrderIdProductConfigurationsImpl.setReq(getReq());
implPutCustomerProductOrderIdProductConfigurationsImpl.setUriInfo(getUriInfo());
}}
// 使用 Mockito 框架测试类
@RunWith(MockitoJUnitRunner.class)
public class CTest {
@Mock
private A a = Mockito.mock(A.class);
@InjectMocks
private C c = new C();
private ImplBackEndInput implBackEndInput;
@Test
public void testExecuteCallObject() {
implBackEndInput = new ImplBackEndInput();
UriInfo uriInfo = Mockito.mock(UriInfo.class);
Mockito.when(a.getUriInfo()).thenReturn(uriInfo);
Mockito.when(a.getReq()).thenReturn(httpServletRequest);
try {
c.executeCall(implBackEndInput);
} catch (Exception e) {
}
}
}
【问题讨论】:
-
如何从可见性为
protected的测试类中调用executeCall? -
@InjectMocks private C c = new C();
-
您可以尝试添加以下代码行吗?
标签: java unit-testing mockito