简体   繁体   中英

PowerMock class not found

For some reason I fail to follow a pretty straight forward PowerMock example.

I included powermock-mockito-1.5.1-full in my classpath, and I try to test a public final method (following this example).

For some reason I am not able to make the import to the PowerMock class.

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();
    }
}

As the comment explains, the PowerMock class can't be imported from the power mock jar.

It feels like a silly question, but I really can't find anything on the internet.

Where should I be able to find the static class PowerMock ? I also used Java Decompile to search the powermock library, no hits on powermock / replay.

The example you are following PowerMock.replay(_cameraMock); is using EasyMock, while you seem to be wanting Mockito. Take a look at this tutorial for mockito & power mock

I suggest you not to create your mock in your setUp() (Before) method, because a mock is very complicated, for example you can tell it exactly how many time it should expect a method is called, if you declare a "general" mock for all your tests it's very difficult to control this behaviour.

maybe (without the code I can only guess) you want that your android.hardware.Camera is called inside your Camera.release() method, am I right? so I whould do like this:

The method you are trying to mock is not static, it's a normal final method. You can try to do this:

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);

if inside camera.relase() is not called exactly once the android.hardware.Camera.release() method the test fails.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM