首页 > 解决方案 > 如何在实现另一个类的抽象类中测试函数

问题描述

如果你愿意,你可以给我投反对票。我是mockito的新手。如何使用 mockito 测试扩展另一个类的抽象类的函数。我尝试在下面实现它,但得到了一个 nullPointerException。我知道你不应该使用这样的抽象,但这是一个老团队开发的旧代码,我需要测试我的功能。如果没有可能,请告诉我。

我在

扩展抽象类的测试类

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());
}

标签: javaspring-bootmockitoabstract-class

解决方案


您可以在测试用例中编写该抽象类的匿名实现并测试该类公开该方法。这样,您可以在测试代码中完全对被测代码进行最小的更改(因此不会影响生产代码)。


推荐阅读