Я пытаюсь создать фиктивный компонент в тесте моего контроллера.Тест не пройден из-за неоднозначности, существует 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)
к сгенерированному макету?