【发布时间】:2019-08-11 13:41:14
【问题描述】:
我在 Quarkus 应用程序中有两个类,我们称它们为 Service A 和 Service B。Service B 是 A 的依赖项。当我测试 ServiceA 时,我想模拟 ServiceB。当我测试ServiceB时,我想测试真正的Service B。
我在this guide on quarkus.io 之后创建了一个 MockServiceB 类。如果我把它放在我的 /test 目录中,我的 ServiceATest 将正确地抓取模拟。但我的 ServiceBTest 课程也是如此。如何有选择地将模拟注入不同的类?更好的是,我可以有选择地为不同的方法使用不同的模拟吗?
(我尝试回退到使用 Mockito,但它似乎不适用于 Quarkus 和 QuarkusTest,除非我弄错了。)
@ApplicationScoped
public class ServiceA {
@Inject
ServiceB serviceB;
public int giveMeANumber() {
serviceB.getNumber();
}
}
@ApplicationScoped
public class ServiceB {
public int getNumber() {
// does the real work;
return 1;
}
}
@QuarkusTest
class ServiceATest {
@Inject
ServiceA serviceA;
@Test
public void shouldReturnNumber() {
int number = serviceA.giveMeANumber();
assertEquals(1, number);
}
}
@Mock
@ApplicationScoped
class MockServiceB extends ServiceB {
@Override
public int getNumber() {
// don’t do the real work
return 1;
}
}
@QuarkusTest
class ServiceBTest {
@Inject
ServiceB serviceB;
@Test
public void shouldGetNumber() {
int number = serviceB.getNumber();
// uses the mock, I don't want it to
assertEquals(1, number);
}
}
【问题讨论】:
-
目前不支持开箱即用,但未来可能会改变
-
好的,谢谢。我认为这对我来说可能是一个交易破坏者。现在可能需要将 Quarkus 放回货架上。
-
实现这一点的能力可能更接近而不是更进一步。建议大家多多留意
-
酷。我将以一种可以轻松迁移到 quarkus 的方式进行构建
-
@geoand 发现 this ticket 跟踪这个问题,还有其他的吗?
标签: dependency-injection quarkus