当前位置: 首页 > 知识库问答 >
问题:

如何在父类中模拟@注入对象

咸皓
2023-03-14

我有一个@InjectMocks对象,在我的测试类中使用@InjectMocks时,我需要模拟它抛出的NPE

下面是我的班级结构

Class ChildClass extends ParentClass
{

public myMethod(){

String myval=callParentClassMethod();

}

Class ParentClass{

@Inject
private MyService myservice;
//there is no constructor or setter method for this injected object

protected String callParentClassMethod(){
retrun myservice.getStringval();
}

}

你能建议如何模仿这个MyService对象吗。我已经使用了@Mock和@Injected Mock,但在获得NPE时不起作用。我尝试注入基类和父类,但没有成功。

共有1个答案

翟冯浩
2023-03-14

以下是我的作品:

@RunWith(MockitoJUnitRunner.class)
public class MyTest {
    @InjectMocks
    private ChildClass childClass = new ChildClass();

    @Mock
    private MyService service;

    @Test
    public void test1() {
        childClass.myMethod();
    }
}

更新我已经上传了带有测试的示例项目到https://github.com/shurick-k/mock-test

您还没有指定使用哪种类型的@Inject注释,所以我假设它来自javaee api。其实没关系。

 类似资料:
  • 问题内容: 我有以下课程: 和测试类: 如何在MyClass中将Apple实例作为模拟注入? 问题答案: 您可以通过3种方式解决此问题: 抽象工厂 :使用具体的工厂类,而不是使用静态方法: 在测试类中,模拟工厂: PowerMock :使用PowerMock创建静态方法的模拟。查看我对一个相关问题的答案,看看它是如何完成的。 可测试的类 :将创建的内容包装在方法中,并创建一个覆盖它的测试类: 当然

  • 问题内容: 每当我想测试使用资源注入的类时,我最终都会包含一个仅在测试中使用的构造函数: 还有另一种模拟资源注入的方式,或者这是遵循的正确模式吗? 问题答案: 您可以使用简单的光泽效果,它可以模拟EJB注入系统。 另一种方法是在测试中使用反射来设置字段,我有时使用类似这样的内容:

  • 所以我有三个类:A、B、C。我需要为类编写单元测试。 因此,C是一种重要的资源(如JDBC或ssh会话)。当然,我在嘲笑C。如何模拟B。想象一下,B有许多扩展它的子类。 我的主要问题是A正在调用super。(...) 。我不想仅仅为了测试而将方法注入到A中。对我来说,这是个糟糕的设计。有没有办法嘲笑父母? 例如,我不能执行类MockB扩展B{…} 然后尝试

  • 我想测试一个调用对象的类(java中的静态方法调用),但我不能模拟这个对象以避免执行真正的方法。 any()方法来自mockito_kotlin。然后,如果我将一个模拟上下文传递给newIntent方法,则似乎调用了real方法。

  • 我有一个带有的测试类,它用于初始化Mockito: 现在我有一个@autowired field来获得方面的建议,但不能注入模拟。

  • 可以模拟抽象类,也可以使用Mockito注释将模拟类注入抽象类。我现在有以下情况: 我想在AbstractClassUnderTest上使用类似@InjectMocks的东西,但它不能与@Mock结合使用。Powermock的Whitebox的当前情况是有效的,但我很好奇是否可以通过注释来解决它。我找不到任何解决方案或示例。 (我知道对测试抽象类的反对意见,我个人更愿意测试一个具体的实现,只使用@