【问题标题】:How to test a function in an abstract class that implements another class如何在实现另一个类的抽象类中测试函数
【发布时间】: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 我知道这没有意义。但这是一位老开发人员编写代码的方式。我只是在修复错误,我需要一些帮助来测试修复是否按预期工作。您可以根据需要多次对我投反对票,但我只需要对此进行测试。
  • 你也许应该从实例化一个扩展你的抽象类的类开始。然后,如果你想将模拟注入你的类,你需要定义它们。在这种情况下,您需要两个模拟:webServiceClientanotherWebServiceClient。尝试调试您的测试以确保正确设置所有属性。还要注意@spy 等价于Mockito.spy(...)
  • @D.Lawrence 让我试试

标签: java spring-boot mockito abstract-class


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多