2013-03-06 76 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