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

如何模拟一系列注射中的一次注射-阿奎利安

靳金鹏
2023-03-14

如何模拟处于注入链中的类?例如,ServiceA注入ServiceB,后者注入ServiceC(ServiceA-

在Arquillian测试中,我需要测试ServiceA和mock ServiceC,这在我的注入链中被调用。

我想要的是(服务)-

我怎样才能用阿奎利安做到这一点?

@RunWith(Arquillian.class)
public class ServiceATest {

  @Inject
  private ServiceA serviceA;

  public void shouldTestServiceA() {
    //Mock ServiceC.execute();
    serviceA.execute();
  }

}

public class ServiceA {

  @Inject
  private ServiceB serviceB;

  public void execute() {
    serviceB.execute();
  }

}

public class ServiceB {

  @Inject
  private ServiceC serviceC;

  public void execute() {
    serviceC.execute();
  }

}

//needs to be mocked
public class ServiceC {

  public void execute() {

  }

}

共有1个答案

艾志尚
2023-03-14

您应该考虑通过构造函数注入遵循显式依赖原则。

而且,类应该依赖于抽象,而不是具体。

ServiceA已知依赖于ServiceC是一个实现问题,也是一种代码气味。

public class ServiceA {

    private ServiceB serviceB;

    public ServiceA(@Inject ServiceB serviceB) {
        this.serviceB = serviceB;
    }

    public void execute() {
        serviceB.execute();
    }
}

public interface ServiceB {
    void execute();
}

public interface ServiceC {
    void execute();
}

现在只需要模拟和注入ServiceB进行测试。

ServiceB实现的依赖性不再是ServiceA

 类似资料:
  • 我不熟悉匕首和莫基托。我尝试在单元测试中使用Dagger模块中定义的构造函数,以便使用默认值创建对象。 这是模块: @模块类自动关闭倒计时模块{ 这就是我在单元测试中模拟AutoCloseCountDown类的方法: @RunWith(MockitoJUnitRunner.class)公共类AutoCloseCountDownTimerTest{ 如何实现自动关闭的CountDownTimer将在

  • 我在projet中使用ApacheCamel,我想使用Product注释发送文件中的对象。首先,可能吗?有更好的办法吗? 其次,我尝试了这个代码片段: 当我调用发布方法时,生产者不是注入(null)。有人有主意吗?提前谢谢。

  • 问题内容: 我要测试的Java类(称为)具有以下功能: (有一种方法可以检查条件并调用A或B)。 如何将每个服务的模拟注入适当的变量? 我的Junit拥有以下功能: 但是,当我运行测试以检查在正确条件下调用的服务A / B时,由于没有注入模拟,我得到了空指针。 显然是由于对同一接口()有多个依赖关系。声明模拟服务时,是否可以指定限定词?还是我需要为依赖项设置setter并设置老式方式? 问题答案:

  • 我要测试的Java类(称为)具有以下内容: (有一个方法,它将检查条件并调用a或B)。 显然,这是因为同一个接口()上存在多个依赖关系。在声明模拟服务时,有没有一种方法可以指定限定符?或者我需要为依赖项设置设置器并设置老式的方式吗?

  • 基本上我的问题归结为如何让这个测试通过: 但也许我错过了重点:堆栈溢出会让你相信做我正在做的事情是一种罪过(介绍引用喷油器的工厂,当你要求他们制造产品时,他们只是转发给你),而我正在做的是接近服务定位器,这是一个糟糕的举动。但我看不出解决这个问题的方法。 我有一个名为“可视化”的接口,它有7个实现者。运行时,根据您的数据集,我们选择一组可视化工具来创建和呈现。对于有注入器字段的工厂,我只需添加一个

  • 问题内容: 我让Google Guice负责连接对象。但是,如何测试绑定是否运作良好? 例如,假设我们有一个具有依赖性的类。如何测试B是否正确注入? 注意,这里没有方法,我想断言不是。 问题答案: 对于任何复杂的Guice项目,您都应该添加测试以确保可以使用这些模块来创建您的类。在您的示例中,如果B是Guice无法弄清楚如何创建的类型,则Guice将无法创建A。如果不需要A来启动服务器,但是当服务