2013-03-06 105 views
0

代碼公佈在link的方法實例VS一流水平的實例JUnit測試

現在,當我試圖寫 第一種情況JUnit的我正在錯誤

「需要重播類B「。

但同樣的junit正在爲第二種情況工作。

我JUnit是

@RunWith(PowerMockRunner.class) 
public class TestClass { 

    @Test 
    public void testDoSomeThing() { 
     B b = createMock(B.class) 
     expectNew(b.CallMe()).andReturns(xxx) 
     A a=new A(); 

     replayAll(); 
     a.doSomething(); 
     verifyAll(); 
    } 
} 
+0

你可以發佈你的JUnit測試嗎? – 2013-03-06 09:59:38

+1

你在哪裏看到這個錯誤?是你得到的**精確**字符串? – BobTheBuilder 2013-03-06 10:02:12

+0

@all粘貼我的junit類 – 2013-03-06 10:05:52

回答

0

你忘了添加

@PrepareForTest({A.class, B.class}) 

此批註必須有你在嘲諷類和將使用這些嘲笑類。

1

下面是使用EasyMockPowerMock的解決方案:

TestClass.java

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.powermock.api.easymock.PowerMock; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.modules.junit4.PowerMockRunner; 

@RunWith(PowerMockRunner.class) 
@PrepareForTest({ A.class, B.class }) 
public class TestClass { 

    @Test 
    public void testDoSomeThing() throws Exception { 
     /* Setup */ 
     B bMock = PowerMock.createMock(B.class); 

     /* Mocks */ 
     PowerMock.expectNew(B.class).andReturn(bMock).atLeastOnce(); 
     bMock.callMe(); 

     /* Activate */ 
     PowerMock.replayAll(); 

     /* Test */ 
     A cut = new A(); 
     cut.doSomething(); 

     /* Asserts */ 
     PowerMock.verifyAll(); 
    } 
} 

A.java

public class A { 

    B b = new B(); 

    public void doSomething() { 
     b.callMe(); 
    } 
} 

B.java

public class B { 

    public void callMe() { 

    } 
} 
+0

像魅力一樣工作。非常感謝。 – Pruthviraj 2017-11-24 08:47:22