Java 嘲笑是行不通的

Java 嘲笑是行不通的,java,junit,junit4,easymock,powermock,Java,Junit,Junit4,Easymock,Powermock,我想模拟不同项目中的方法 假设我在JUnitDemo项目中有一个方法调用addNumbers()。 我正在调用另一个项目调用JunitDemoMock中的方法calculate() public final int addNumbers(int num1) { Calculator calculator = new Calculator(); int num2 = calculator.calculate(); total = num1 + num2;

我想模拟不同项目中的方法

假设我在JUnitDemo项目中有一个方法调用addNumbers()。 我正在调用另一个项目调用JunitDemoMock中的方法calculate()

public final int addNumbers(int num1)
    {

        Calculator calculator = new Calculator();
        int num2 = calculator.calculate(); total = num1 + num2;
        return total;
    }
现在我想在单元测试中模拟calculate()方法。我就是这样做的

@RunWith(PowerMockRunner.class)
@PrepareForTest({Calculator.class})
public class MockDemoTest
{

    /**
     * Test method for {@link com.nyl.mock.MockDemo#addNumbers(int)}.
     * 
     * @throws Exception
     */
    @Test
    public void testAddNumbers() throws Exception
    {

        // Mock only the calculate method
        Calculator tested =
                PowerMock.createPartialMock(Calculator.class, "calculate");

        // Expect the private method call to "calculate"
        PowerMock.expectPrivate(tested, "calculate").andReturn(89);
        PowerMock.replay(tested);

        MockDemo mockDemo = new MockDemo();
        assertEquals(10, mockDemo.addNumbers(3));
        //PowerMock.verify(tested);
    }

}
但在这里,真正的嘲弄并没有发生。方法calculate()将在运行时执行。 有谁能告诉我为什么会发生这种情况,以及我们如何正确模拟calculate()

注意:如果我们在同一个项目中使用calculate()方法,我的意思是在JUnitDemo中,模拟工作正常

Lib版本

cglib-nodep-2.2.2.jar, easymock-3.1.jar, javassist-3.18.0-GA.jar, junit-4.7.jar, objenesis-1.2.jar,
powermock-easymock-1.5.1-full.jar,

不确定,但您不需要像MockDemo一样设置Mock实例吗

MockDemo mockDemo = new MockDemo();
mockDemo.setCalculator(tested);