如何模拟处于注入链中的类?例如,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() {
}
}
您应该考虑通过构造函数注入遵循显式依赖原则。
而且,类应该依赖于抽象,而不是具体。
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来启动服务器,但是当服务