2017-08-25 61 views
0

我正在使用easymock和powermock编写下面的Class B的isRegisteredUSer()的单元测试用例。如何模拟类A的getUserInformation()并返回一个模拟的UserAccessBean?如何使用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。

有人可以帮我嘲笑正在测试的方法(Class B的isRegisteredUSer)的另一个类函数方法(Class A的getUserInformation)调用吗?

+0

Powermock提供了一个“mockNew”,但您应该重构代码以简化测试,请参阅https://github.com/powermock/powermock/wiki/mockconstructor – 2017-08-25 18:50:55

回答

0

请下次复制实际工作代码。你的代码有很多错别字和异常,这使得它很难解决。不过,我想你想要一个正常的EasyMock A和一个新的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(); 
    } 
} 

我不过强烈建议A被注入B和摆脱静态方法。这将摆脱PowerMock并简化代码。

相关问题