找不到PowerMock类

时间:2013-09-20 09:24:23

标签: java junit mockito powermock

出于某种原因,我没有按照一个非常简单的PowerMock示例。

我在我的类路径中包含了powermock-mockito-1.5.1-full,并尝试测试公共最终方法(在this示例之后)。

由于某种原因,我无法导入PowerMock类。

import org.junit.*;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import com.cleancode.lifesaver.camera.*;

@RunWith(PowerMockRunner.class)
@PrepareForTest(android.hardware.Camera.class)
public class CameraTests {

    private android.hardware.Camera _cameraMock;

    @Before
    public void setUp() {
        _cameraMock = PowerMockito.mock(android.hardware.Camera.class);
    }

    @Test 
    public void releaseCamera() {
        ICamera camera = new Camera(_cameraMock);

        // Compile error: PowerMock can't be resolved       
        PowerMock.replay(_cameraMock);
        // I also tried PowerMockito.replay(_cameraMock) but that also doesn't exist.

        camera.release();

        Mockito.verify(_cameraMock).release();
    }
}

正如评论所解释的那样,无法从power mock jar导入PowerMock类。

感觉这是一个愚蠢的问题,但我真的在互联网上找不到任何东西。

我应该在哪里找到静态类PowerMock?我还使用Java Decompile搜索powermock库,没有点击powermock / replay。

2 个答案:

答案 0 :(得分:7)

您关注PowerMock.replay(_cameraMock);的示例是使用EasyMock,而您似乎想要Mockito。看一下this tutorial的mockito&权力模拟

答案 1 :(得分:0)

我建议你不要在你的setUp()(Before)方法中创建你的模拟,因为模拟非常复杂,例如你可以准确地告诉它应该调用一个方法的时间,如果你为所有测试声明一个“通用”模拟,很难控制这种行为。

也许(没有我只能猜测的代码)您希望在android.hardware.Camera方法中调用Camera.release(),我是对的吗?所以我会这样做:

您尝试模拟的方法不是静态的,这是正常的最终方法。您可以尝试这样做:

android.hardware.Camera mock = PowerMock.createMock(android.hardware.Camera.class);
PowerMock.expect(mock.release());
PowerMock.replay();

ICamera camera = new Camera(mock);
camera.release();
PowerMock.verify(mock);

如果camera.relase()内部android.hardware.Camera.release()未在{{1}}方法中调用,则测试失败。