【问题标题】:When calling abstract method from concrete class throwing NullPointerException [duplicate]从具体类调用抽象方法时抛出 NullPointerException [重复]
【发布时间】:2016-05-13 04:14:56
【问题描述】:

我正在测试一个类中的方法。这是调用抽象类的方法。

例如:

class abstract Abstract {
  public ReturnObject abstractMethod(SomeObject value) {
    // do something
    return returnObject;
  }
}

class Concreate extends Abstract {
   public ReturnObject concreteMethod(SomeObject value) {
   //do something
   returnObject = abstractMethod(value);
   return returnObject;
   }

}

My UT is 

class ConcreateTest {
  @InjectMocks
  private Concreate conctrete;

  @Mock
  private Concreate conctrete2;

  @Test
  public void test_method() {
     when(conctrete2.abstractMethod(value)).thenReturn(returnObject);
     conctrete.concreteMethod(value);
  }

}

这样它会返回 NullPointerException。

【问题讨论】:

  • 您没有添加可以编译的最少代码?看到您的代码我们无法帮助您,并添加错误跟踪。获得快速解决方案。
  • @FaizAli 抱歉,我错误地拒绝了您的编辑,认为您正在删除空格,对此我深表歉意。但它会被批准,不用担心。

标签: spring mockito


【解决方案1】:

从您所展示的内容来看,我几乎看不到您的代码来确定发生了什么,但我看到的一件事是您正在模拟一个 Concreate,然后将该模拟注入另一个 Concreate。我在您显示的代码中没有看到任何地方告诉我一个 Concreate 使用另一个注入的 Concreate。这本质上只是伪代码。所以基本上我假设你的主要 Concreate 被注入到应用程序上下文中,而你的另一个 Concreate 被注入到第一个。

您需要@Named 来解决这种歧义,或者更笼统地说,您必须给您的 bean 一个单独的名称,即使它们被嘲笑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    相关资源
    最近更新 更多