我想用JUnit
and对我的班级进行单元测试EasyMock
。它延伸android.location.Location
. 但是我总是遇到Stub!
异常,因为大多数 Android 方法在 JVM 运行时中不可用。
public class MyLocation extends Location {
public MyLocation(Location l) {
super(l);
}
public boolean methodUnderTest() {
return true;
}
}
我尝试使用 模拟构造函数调用Powermock
,但看起来它不适用于super
调用。我的测试:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Location.class)
public class MyLocationTest {
@Test
public void methodUnderTestReturnsTrue() throws Exception {
Location locationMock = EasyMock.createMock(Location.class);
expectNew(Location.class, Location.class).andReturn(locationMock);
MyLocation myLocation = new MyLocation(locationMock);
assertTrue(myLocation.methodUnderTest());
}
}
我得到一个例外:
java.lang.RuntimeException: Stub!
at android.location.Location.<init>(Location.java:6)
显然解决方案是在Android 运行时执行这个测试(即启动Android Simulator)。但我不喜欢这种方法,因为启动这样的测试套件需要相当长的时间。有没有办法存根super
调用或者可能有更好的方法来测试这样的实现?