JUnit Mockito在另一个类中模拟一个方法错误 [英] JUnit Mockito mock one method in another class Error
问题描述
我使用Netbeans 8.1,Junit和Mockito来为我的项目编写单元测试. 这是我的一些代码
I use Netbeans 8.1 , Junit and Mockito to write unit test for my project. Here is some pieces of my code
要测试的功能:
public Map<String, String> getAllUsers() {
if (allUsers == null) {
if (session.checkACL2("DonateBookPrivilegeLevel") || session.checkACL2("ManageUserPrivilegeLevel")) {
Iterator<User> it = userFc.findAll().iterator();
System.out.println("PC::enum()");
allUsers = new HashMap<String, String>();
while (it.hasNext()) {
User item = it.next();
allUsers.put(item.getName(), item.getUserId().toString());
}
}
}
return allUsers;
}
我的测试班:
package com.controller;
import com.entities.User;
import com.jsfc.util.JsfUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.faces.event.ActionEvent;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.runner.RunWith;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Matchers.anyString;
import org.mockito.Mock;
import org.mockito.Mockito;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import org.mockito.MockitoAnnotations;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class PersonalCenterControllerTest {
public PersonalCenterControllerTest() {
}
@BeforeClass
public static void setUpClass() {
}
@AfterClass
public static void tearDownClass() {
}
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@After
public void tearDown() {
}
/**
* Test of getAllUsers method, of class PersonalCenterController.
*/
@Test
public void testGetAllUsers() {
System.out.println("getAllUsers");
PersonalCenterController pcController = new PersonalCenterController();
SessionController session = Mockito.mock(SessionController.class);
when(session.checkACL2(anyString())).thenReturn(true).thenReturn(true);
Map<String,String> userMap = null;
userMap = pcController.getAllUsers();
}
}
如您所见,我调用在另一个类中定义的session.checkACL2(),我使用
As you can see, I call session.checkACL2() which is defined in another class, I use Using Mockito to mock a class method inside another class to fix
SessionController session = Mockito.mock(SessionController.class);
doReturn(true).when(session).checkACL2((String) anyObject());
,但在if行调用NullPointerException
.
推荐答案
您是否真的将模拟的SessionController
实例传递给了PersonalCenterController
实例?
如果您尝试在模拟后立即调用SessionController
方法,它会返回您期望的结果吗?
Are you actually passing mocked SessionController
instance to your PersonalCenterController
instance?
If you try calling SessionController
methods right after mocking does it return what you expected?
SessionController session = Mockito.mock(SessionController.class);
when(session.checkACL2(anyString())).thenReturn(true).thenReturn(true);
assertTrue(session.checkACL2("DonateBookPrivilegeLevel"));
assertTrue(session.checkACL2("ManageUserPrivilegeLevel");
如我所见,NullPointerException
可能来自session
实例,可能是null
或返回null
,然后将其转换为boolean
.我的第一步是弄清楚是哪个.
As I see NullPointerException
here could be from session
instance either being null
or returning null
, that is then being converted to boolean
. My first step would be to figure out which is it.
这篇关于JUnit Mockito在另一个类中模拟一个方法错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!