2017-05-13 10 views
0

종속성이 데이터베이스 클래스에있는 클래스 인 UserAdmin을 테스트해야합니다. UserAdmin 클래스를 테스트하기 위해 데이터베이스 클래스를 조롱했습니다. 데이터베이스 클래스에는 사용자가 관리자인지 아닌지를 결정하는 isAdmin() 메소드가 있습니다. UserAdmin 클래스에는 removeUser()라는 메서드가 있으며이 오류에 대해이 오류가 발생합니다. 사용자가 관리자이면 removeUser() 메서드가 사용자를 제거 할 수 없습니다. 다음은이 오류가 나타나는 코드입니다. 나는 위의 assertequals을 넣어Jmockit : 오류 1에서 호출이 누락되었습니다

@Test 
    //testing remove user method of UserAdmin - remove Admin 
     public void testremoveUserAdmin() throws SQLException{ 
      new Expectations() {{ 

       dBConnection.isAdmin("admin"); 
       times=1; 
       result = true; 

      }};    
     assertEquals(false,userAdmin.removeUser("admin")); 

, 그것은 누락 된 호출 오류를 제공하지만이 주장의 진실과 거짓 교체 할 때, 그것은 사실이지만 거짓 예상했다. 왜 내가이 오류가 발생하는지 잘 모르겠습니다. isAdmin()과 같은 비슷한 메소드를 실행하는 비슷한 코드가 잘 동작합니다. 도와주세요

+0

은 어떻게 "dBConnection"필드를 선언입니까? '@ Mocked' 또는 @ @ Injectable? 두 번째 경우,이 동일한 조롱 된 인스턴스는'UserAdmin # removeUser' 메소드 내에서 사용 된 인스턴스 여야합니다. –

+0

@Mocked를 사용했습니다 \t DBConnection dBConnection; – StevieG

+0

위의 assertequals를 넣을 때 호출 오류가 누락되지만 assertion에서 false를 true로 바꾸면 예상 된 것이지만 false입니다. – StevieG

답변

1

작품 미세 :

public class UserAdminTest { 
    static class DBConnection { boolean isAdmin(String userName) { return false; } } 

    static class UserAdmin { 
     boolean removeUser(String userName) { 
      DBConnection dbConnection = new DBConnection(); 

      if (!dbConnection.isAdmin(userName)) { 
       // remove user 
       return true; 
      } 

      return false; 
     } 
    } 

    @Tested UserAdmin userAdmin; 
    @Mocked DBConnection dBConnection; 

    @Test 
    public void doesNotRemoveUserWhenAdmin() throws Exception { 
     new Expectations() {{ dBConnection.isAdmin("admin"); result = true; }}; 

     boolean removedIt = userAdmin.removeUser("admin"); 

     assertFalse(removedIt); 
    } 
} 
+0

완벽한! Rogerio에게 감사드립니다. @Test 부분은 내가 작성한 것과 똑같습니다. – StevieG

0

isAdmin 메서드 전에 호출해야하는 다른 방법이있었습니다. isAdmin 메서드를 호출하기 전에이 메서드를 호출하면 문제가 해결됩니다. 나를 위해

관련 문제