簡體   English   中英

在使用PowerMock注入后,模擬一個Object的方法調用EasyMock

[英]Mocking an Object's method calls by EasyMock after injecting it using PowerMock

我在我的項目中有一個以下類,我正在嘗試編寫一個測試用例

Class A{
    a(){
        B b = new B();
        int ans = b.somefunction();
    }
}

我需要在上面的類中為我的測試模擬somefunction()調用

我試過以下來實現這一點

@RunWith(PowerMockRunner.class)
@PrepareForTest({A.class,B.class})
Class TestA{
    testa(){
        EasyMock mb = EasyMock.createMock(B.class);
        PowerMock.createMock(B.class);
        PowerMock.expectNew(B.class).andReturn(mb);
        EasyMock.expect(mb.somefunction()).andReturn(0);
        EasyMock.replay(mb);
        PowerMock.replay(B.class);
    }
}

但它總是給出Java.lang.AssertionError:意外的方法調用B.somefunction()

我的包中有PowerMock 1.5.5和EasyMock 3.2

有人可以幫助我解決上述問題,並幫助我弄清楚我到底出錯了什么地方。 我是使用EasyMock和PowerMock的新手。

是否存在測試給定類的更簡單方法。

您沒有正確執行測試用例,不需要測試類中的構造函數

正確的方法是這樣做:

@RunWith(PowerMockRunner.class)
@PrepareForTest({A.class,B.class})
class TestA{
    B mb=EasyMock.createNiceMock(B.class); 
    PowerMock.expectNew(B.class).andReturn(mb).anyTimes();
    EasyMock.expect(mb.somefunction()).andReturn(0).anyTimes();
    EasyMock.replay(mb);
    PowerMock.replayAll();

    A a=new A(); //calling A's Constructor so that test case actually runs
}

希望這可以幫助!

祝好運

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM