У меня есть два класса в приложении Quarkus, назовем их Службой A и Службой B. Служба B является зависимостью от A. Когда я тестирую Службу A, я хочу имитировать Службу B. Когда я тестирую ServiceB, я хочу протестировать настоящий Service B.
Я создал класс MockServiceB, следуя этому руководству на quarkus.io. Если я положу его в свой каталог /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);
}
}