gpt4 book ai didi

java - Java 中用于单元测试的 Mock/Stub super 构造函数调用

转载 作者:行者123 更新时间:2023-11-30 09:16:51 24 4
gpt4 key购买 nike

我想用 JUnitEasyMock 对我的类进行单元测试。它扩展了 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 模拟器)。但我不喜欢这种方法,因为启动这样的测试套件需要相当多的时间。有没有办法对 super 调用进行 stub ,或者可能有更好的方法来测试此类实现?

最佳答案

Taken straight from the Powermocks documentation.

然后可以在不调用 EvilParent 构造函数的情况下完成测试。

@RunWith(PowerMockRunner.class)
@PrepareForTest(ExampleWithEvilParent.class)
public class ExampleWithEvilParentTest {

@Test
public void testSuppressConstructorOfEvilParent() throws Exception {
suppress(constructor(EvilParent.class));
final String message = "myMessage";
ExampleWithEvilParent tested = new ExampleWithEvilParent(message);
assertEquals(message, tested.getMessage());
}
}

关于java - Java 中用于单元测试的 Mock/Stub super 构造函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19255332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com