【发布时间】:2020-03-22 05:10:48
【问题描述】:
如果你愿意,你可以给我投反对票。我是mockito的新手。如何使用 mockito 测试扩展另一个类的抽象类的函数。 我尝试在下面实现它,但得到了一个 nullPointerException。 我知道你不应该使用这样的抽象,但这是一个老团队开发的旧代码,我需要测试我的功能。 如果没有可能,请告诉我。
我在
中看到了例子Testing class that extends abstract class
public abstract class AbstractClass implements SomeInterface {
protected final WebServiceClient webServiceClient;
protected final AnotherWebServiceClient anotherWebServiceClient;
public BaseParser(
WebServiceClient webServiceClient,
AnotherWebServiceClient anotherWebServiceClient
) {
this.webServiceClient = webServiceClient;
this.anotherWebServiceClient = anotherWebServiceClient;
}
public functionToTest(String msg) {
System.out.println(msg)
}
我的测试
@InjectMocks
@Spy
private AbstractClass aClass;
@Test
public void testSave() {
AbstractClass spy = Mockito.spy(aClass);
Mockito.doNothing().when((SomeInterface) spy).getId();
spy.functionToTest(any());
verify(spy).functionToTest(any());
}
【问题讨论】:
-
你可以问问自己测试一个抽象类是否有意义?
-
@D.Lawrence 我知道这没有意义。但这是一位老开发人员编写代码的方式。我只是在修复错误,我需要一些帮助来测试修复是否按预期工作。您可以根据需要多次对我投反对票,但我只需要对此进行测试。
-
你也许应该从实例化一个扩展你的抽象类的类开始。然后,如果你想将模拟注入你的类,你需要定义它们。在这种情况下,您需要两个模拟:
webServiceClient、anotherWebServiceClient。尝试调试您的测试以确保正确设置所有属性。还要注意@spy等价于Mockito.spy(...) -
@D.Lawrence 让我试试
标签: java spring-boot mockito abstract-class