WELD-001409: Неоднозначные зависимости в тесте Джерси из-за имитации бобов - PullRequest
0 голосов
/ 01 января 2019

Я пытаюсь создать фиктивный компонент в тесте моего контроллера.Тест не пройден из-за неоднозначности, существует 2 компонента с одинаковыми квалификаторами.

Код теста:

public class HelloControllerTest extends JerseyTest {

    @Mock
    private HelperService helperService;

    @InjectMocks
    private GreetingsService greetingsService;

    @Override
    protected Application configure() {
        MockitoAnnotations.initMocks(this);
        return new ResourceConfig(HelloController.class)
                .register(new AbstractBinder() {
                    @Override
                    protected void configure() {
                        bind(helperService).to(HelperService.class);
                    }
                });
    }

    @Test
    public void testHello(){
        String mockResponse = "Hello from mocked helper service!";
        Mockito.when(helperService.hello()).thenReturn(mockResponse);
        String entity = target("/hello").request().get(String.class);
        Assert.assertEquals("Wrong response", mockResponse, entity);
    }
} 

Исходный код:

@Path("/")
@Produces("application/text")
public class HelloController {

    private final GreetingsService greetingsService;

    @Inject
    public HelloController(GreetingsService greetingsService) {
        this.greetingsService = greetingsService;
    }


    @GET
    @Path("hello")
    public Response hello(){
        return Response.ok(greetingsService.hello()).build();
    }
}


@ApplicationScoped
public class GreetingsService {

    private final HelperService helperService;

    @Inject
    public GreetingsService(HelperService helperService){
        this.helperService = helperService;
    }


    public String hello(){
        return helperService.hello();
    }
}

public class HelperService {

    public String hello(){
        return "Hello from helper service!";
    }
}

@ApplicationScoped
public class HelperServiceProducer {

    @Produces
    public HelperService createHelperService(){
        return new HelperService();
    }
}

Сбой теста с исключением:

org.jboss.weld.exceptions.DeploymentException: WELD-001409: Ambiguous dependencies for type HelperService with qualifiers @Default
  at injection point [BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedConstructor] @Inject public example.services.GreetingsService(HelperService)
  at example.services.GreetingsService.<init>(GreetingsService.java:0)
  Possible dependencies: 
  - org.glassfish.jersey.inject.cdi.se.bean.InstanceBean@1929425f,
  - Producer Method [HelperService] with qualifiers [@Any @Default] declared as [[BackedAnnotatedMethod] @Produces public example.utils.HelperServiceProducer.createHelperService()]

Источник кода можно найти по адресу https://github.com/maximkir/study-weld

Вопрос в том, как пометить созданный фиктивный бин какжелаемый боб для инъекций?Могу ли я добавить @Alternative с @Priority(100) к сгенерированному макету?

...