2017-05-13 24 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'では? 2番目の場合は、この同じ模擬されたインスタンスは、 'UserAdmin#removeUser'メソッドの中で使われているインスタンスでなければなりません。 –

+0

@Mockedを使用しました \t DBConnection dBConnection; – StevieG

+0

上記のassertequalsを置くと、呼び出しエラーが発生しますが、アサーションで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に感謝します。同じ@テスト部分は私が書いたもので、それはうまくいった! – StevieG

0

isAdminメソッドの前に呼び出されていたはずの別のメソッドがありました。 isAdminメソッドの前に呼び出すと問題が解決しました。私にとって

関連する問題