2017-08-25 14 views
0

私は、クラスAのgetUserInformationを()モックと嘲笑UserAccessBeanを返すために、どのようにクラスBのisRegisteredUSer()以下のためのユニットテストケースを書くことeasymockとpowermockを使用していますか?powermock-easymockを使ってテストされているメソッドから別のクラスメソッド呼び出しをモックする方法はありますか?

class A{ 
    private int userId; 
    A(int userId){ 
     this.userId = userId; 
    } 
    public UserAccessBean getUserInformation(){ 
     UserAccessBean userAB = new USerAccessBean().findByUserId(userId); 
     return userAB; 
    } 
} 


Class B{ 
    public static boolean isRegisteredUSer(int userId){ 
    A a = new A(userId); 
    UserAccessBean userAB = a.getUserInformation(); 
    if(userAB.getUserType().equals("R")){ 
     return true; 
    } 
    return false; 
} 


JUnit 

    public class BTest extends EasyMockSupport{ 
    UserAccessBean userAB = null; 
    A a = null; 
    int userId = 12345; 
    @Before 
    public void setUp() throws Exception { 
     userAB = new UserAccessBean(); 
    } 

     @Test 
    public void when_UserDesctiptionIsR_Expect_True_FromIsRegisteredUser() throws Exception{ 
     //data setup 
     userAB.setDescription("R"); 
     A a = new A(12345); 

     EasyMock.expect(a.isRegisteredUser()).andReturn(userAB); 
     PowerMock.replayAll(); 

     Boolean flag = B.isRegisteredUser(userId); 
     assertEquals(flag, true); 
     PowerMock.verifyAll(); 

    } 
    } 

私はEasyMock.expectを使用している場合でも()getUserInformation()メソッドの呼び出しを模擬するために、私のコンソールはgetUserInformation内で起こっている()私は私のJUnitを実行したとき。

誰かが別のクラスの機能の方法を模擬するために私を助けてください方法から(クラスAのgetUserInformation)コール(クラスBのisRegisteredUSer)がテストされていますか?

+0

Powermockは「mockNew」を提供していますが、テストを容易にするために、あなたのコードをリファクタリングする必要があり、https://github.com/powermock/powermock/wiki/mockconstructorを参照してください –

答えて

0

してください、次回のコピー実際の作業コード。あなたのコードには多くのタイプミスや異常があり、回避策が難しくなっています。

しかし、私はAの普通のEasyMockとBの新しいモックをしたいと思う。以下のコードは、あなたの質問

@RunWith(PowerMockRunner.class) 
@PrepareForTest({A.class, B.class}) 
public class BTest extends EasyMockSupport { 
    UserAccessBean userAB = new UserAccessBean(); 
    A a; 
    int userId = 12345; 

    @Test 
    public void when_UserDesctiptionIsR_Expect_True_FromIsRegisteredUser() throws Exception { 
    //data setup 
    userAB.setDescription("R"); 
    A a = createMock(A.class); 

    expect(a.getUserInformation()).andReturn(userAB); 
    replayAll(); 

    PowerMock.expectNew(A.class, userId).andReturn(a); 
    PowerMock.replay(A.class); 

    Boolean flag = B.isRegisteredUser(userId); 
    assertEquals(flag, true); 
    PowerMock.verifyAll(); 
    verifyAll(); 
    } 
} 

に答える必要がありますしかし私は非常にBに注入すると、静的メソッドを取り除くためにAをお勧めします。それはPowerMockを取り除き、コードを単純化します。

関連する問題