2016-06-11 3 views
0

Netbeans 8.1, Junit 및 Mockito를 사용하여 프로젝트의 단위 테스트를 작성합니다. 여기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()를 호출 다른 클래스에서, 나는

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

를 해결하기 위해 Using Mockito to mock a class method inside another class를 사용하지만, 캘리포니아 줄을 때 NullPointerException예요.

+0

어떤 주니퍼 러너를 사용하고 있습니까? @RunWith (MockitoJUnitRunner.class) 또는 비슷한 것을 사용하여 수업에 주석을 추가 했습니까? 수입 명세서를 포함한 전체 수업을 게시 할 수 있습니까? 해당되지 않는 다른 기능을 제거 할 수 있습니다. – TechCrunch

+0

Netbeans 통합 junit 4.12를 사용합니다. 전에 @RunWith (MockitoJUnitRunner.class)를 추가하는 것을 잊었지만 추가 한 후에도 오류가 표시됩니다. 오류 발생 : java.lang.NullPointerException. 그리고 내가 Source에 갈 때 여전히 세션에 갇혀 있습니다 .checkACL2() – Jane

+0

두 번 다시 누르지 않아도됩니다. NullPointerException 스택 추적을 붙여 넣을 수 있습니까? – TechCrunch

답변

0

당신은 실제로 PersonalCenterController 인스턴스에 조롱 SessionController 인스턴스를 전달하고 있는가? 조롱 한 직후 SessionController 메서드를 호출하면 예상 한 결과가 반환됩니까? 내가 session 인스턴스에서 수 여기 NullPointerException를 참조로

SessionController session = Mockito.mock(SessionController.class); 
when(session.checkACL2(anyString())).thenReturn(true).thenReturn(true); 
assertTrue(session.checkACL2("DonateBookPrivilegeLevel")); 
assertTrue(session.checkACL2("ManageUserPrivilegeLevel"); 

는 하나 null 인 또는 null를 반환, 그 다음 boolean로 변환되고있다. 내 첫 걸음은 그것이 무엇인지 파악하는 것입니다.

+0

테스트 된 함수에서 볼 수 있듯이이 문제는 개인 멤버 변수입니다. 개인 인스턴스를 PersonalCenterController 인스턴스로 설정하려면 setSession() 클래스에서 다른 메소드를 호출해야합니다. 하나의 함수를 테스트 할 때 다른 함수를 호출하는 것이 맞습니까? – Jane

+0

추가 동작없이 간단한 setter'setSession()'을 사용한다면 나는 완벽하다고 생각합니다. 'setSession()'안에 복잡한 논리가 있지만 다른 논리로이 논리를 다뤘다면 괜찮다고 생각합니다. –

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. 
} 

} 
+0

테스트 전에 @RunWith (MockitoJUnitRunner.class)를 추가했지만 여전히 오류가 표시됩니다 : 오류 : java.lang.NullPointerException이 발생했습니다. 그리고 Source에 가면 여전히 세션에 머물러 있습니다. checkACL2() – Jane

관련 문제