出于某种原因,我没有按照一个非常简单的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。
答案 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}}方法中调用,则测试失败。