JUnit Mockito在另一个类中模拟一个方法Error

时间:2016-06-11 10:10:34

标签: unit-testing junit mockito

我使用Netbeans 8.1,Junit和Mockito为我的项目编写单元测试。 这是我的一些代码

待测功能:

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(),我使用Using Mockito to mock a class method inside another class来修复

SessionController session = Mockito.mock(SessionController.class);
doReturn(true).when(session).checkACL2((String) anyObject());

但它在if行调用NullPointerException

2 个答案:

答案 0 :(得分:0)

确保使用'MockitoJUnitRunner.class'运行JUnit。

@RunWith(MockitoJUnitRunner.class)
public class MyClassTest{

public void myMethodTest(){
   SessionController session = Mockito.mock(SessionController.class);
 Mockito.when(session).checkACL2(Mockito.anyString()).thenReturn(true).thenReturn(true);
  //Write logic to test your businesss logic inside class and assert the result.
}

}

答案 1 :(得分:0)

您是否实际将模拟SessionController实例传递给PersonalCenterController实例? 如果您在模拟后立即尝试调用SessionController方法,它会返回您的预期吗?

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。我的第一步是找出它是什么。

相关问题