Как издеваться над остальными клиентами при тестировании приложения Quarkus? - PullRequest
0 голосов
/ 31 мая 2019

Quarkus Getting Unit Unittest описывает, как смоделировать внедренные сервисы. Однако при попытке применить это к клиенту с введенным отдыхом это, похоже, не работает.

В моем приложении атрибут класса, который будет введен, определяется следующим образом:

  @Inject
  @RestClient
  MyService myService;

В своем тестовом коде я создал фиктивный сервис, подобный этому:

@Alternative()
@Priority(1)
@ApplicationScoped
public class MockMyService extends MyService {

    @Override
    public MyObject myServicemethos() {
        return new MyObject();
    }
}

Обратите внимание, что эта услуга не зарегистрирована и не помечена как RestClient. Выполнение моих юнит-тестов, как это, выдает следующую ошибку:

org.junit.jupiter.api.extension.TestInstantiationException: TestInstanceFactory [io.quarkus.test.junit.QuarkusTestExtension] failed to instantiate test class [...MyMediatorTest]: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
    [error]: Build step io.quarkus.arc.deployment.ArcAnnotationProcessor#build threw an exception: javax.enterprise.inject.spi.DeploymentException: javax.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type ...MyService and qualifiers [@RestClient]
    - java member: ...MyMediator#myService
    - declared on CLASS bean [types=[java.lang.Object, ...MyMediator], qualifiers=[@Default, @Any], target=...MyMediator]

    at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.invokeTestInstanceFactory(ClassTestDescriptor.java:314)
  ...

Возможно, я смогу преодолеть это, добавив дополнительный уровень обслуживания. Но это похоже на движение в неправильном направлении.

Как я могу решить это.

С уважением,

1020 * Мысль *

1 Ответ

1 голос
/ 31 мая 2019

Вам не нужен другой уровень косвенности.

Вы можете просто сделать:

@Alternative()
@Priority(1)
@ApplicationScoped
@RestClient
public class MockMyService extends MyService {

    @Override
    public MyObject myServicemethos() {
        return new MyObject();
    }
}

Обратите внимание, что я добавил аннотацию @RestClient.

...