由于某些原因,我没有遵循一个非常简单的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();
}
}正如注释所解释的那样,PowerMock类不能从power mock jar中导入。
这感觉像是一个愚蠢的问题,但我真的在网上找不到任何东西。
在哪里可以找到静态类PowerMock?我还使用了Java反编译来搜索powermock库,但没有找到powermock / replay。
发布于 2013-09-20 17:39:39
您正在遵循的示例PowerMock.replay(_cameraMock);使用的是EasyMock,而您似乎希望使用Mockito。看看this tutorial中的mockito & power mock
发布于 2013-09-20 17:54:27
我建议你不要在你的setUp() (之前)方法中创建你的模拟,因为模拟是非常复杂的,例如,你可以准确地告诉它一个方法应该被调用多少次,如果你为所有的测试声明一个“通用”模拟,那么很难控制这种行为。
也许(没有代码,我只能猜测)您希望在Camera.release()方法中调用android.hardware.Camera,对吗?所以我应该这样做:
您试图模拟的方法不是静态的,它是一个普通的final方法。您可以尝试这样做:
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);如果在android.hardware.Camera.release()方法中没有准确调用内部camera.relase(),则测试失败。
https://stackoverflow.com/questions/18913204
复制相似问题