Sam*_*deh 5 java junit mockito
我正在尝试为Web服务创建测试用例,但我得到了nullpointerexception.这是Web服务:
@Path("friendservice")
public class FriendWebService {
private static final Logger logger = Logger.getLogger(FriendWebService.class);
@EJB
private FriendRequestServiceInterface friendRequestService;
@GET
@Path("friendrequest")
@Produces(MediaType.TEXT_PLAIN)
public String createFriendRequest(
@Context HttpServletRequest request) {
logger.info("createFriendRequest called");
String result = "false";
User user = (User) request.getSession().getAttribute("user");
User otherUser = (User) request.getSession().getAttribute("profileuser");
if ((user != null) && (otherUser != null)) {
logger.info("Got two users from session, creating friend request.");
if (friendRequestService.createFriendRequest(user, otherUser)) {
result = "true";
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
}
这是我的测试类:
public class FriendWebServiceTest {
@Mock
FriendRequestServiceInterface FriendRequestService;
@Mock
Logger mockedLogger = mock(Logger.class);
@Mock
HttpServletRequest mockedRequest = mock(HttpServletRequest.class);
@Mock
HttpSession mockedSession = mock(HttpSession.class);
@Mock
User mockedUser = mock(User.class);
@Mock
User mockedOtherUser = mock(User.class);
@InjectMocks
FriendWebService friendWebService = new FriendWebService();
@Before
public void setUp() throws Exception {
}
@Test
public void testCreateFriendRequest() throws Exception {
when(mockedRequest.getSession()).thenReturn(mockedSession);
when(mockedSession.getAttribute("user")).thenReturn(mockedUser);
when(mockedSession.getAttribute("profileuser")).thenReturn(mockedOtherUser);
when(FriendRequestService.createFriendRequest(mockedUser, mockedOtherUser)).thenReturn(true);
assertTrue(friendWebService.createFriendRequest(mockedRequest) == "true");
}
Run Code Online (Sandbox Code Playgroud)
NullPointerException发生在"when(FriendRequestService.createFriendRequest(mockedUser,mockedOtherUser)).thenReturn(true);"
我究竟做错了什么?
Raf*_*ter 10
您在模拟的实例上链接方法调用:
@Mock
HttpServletRequest mockedRequest = mock(HttpServletRequest.class);
Run Code Online (Sandbox Code Playgroud)
首先,您不需要同时使用@Mock注释或mock方法.像这样,你首先分配一个模拟,然后用另一个模拟替换这个实例.我建议使用注释,因为它会为模拟添加一些上下文,例如字段的名称.这可能已经导致您,NullPointerException因为您永远不会通过调用以下方式激活注释:
MockitoAnnotations.initMocks(this);
Run Code Online (Sandbox Code Playgroud)
因为到目前为止你没有使用这两个措施模拟所有实例.但是,即使这样做也会导致您的例外,所以让我们继续前进.
在friendWebService.createFriendRequest(mockedRequest)您致电:
User user = (User) request.getSession().getAttribute("user");
User otherUser = (User) request.getSession().getAttribute("profileuser");
Run Code Online (Sandbox Code Playgroud)
你在两个模拟中调用方法的地方,你没有指定任何行为.这些模拟默认返回null.您需要为此指定行为,例如:
when(request.getSession()).thenReturn(myMockedSession);
Run Code Online (Sandbox Code Playgroud)
在执行此链式呼叫之前.基于此,您可以指定如何对此模拟实例上的调用做出反应,例如返回用户模拟.
| 归档时间: |
|
| 查看次数: |
8437 次 |
| 最近记录: |