1

Я могу развернуть и запустить проект успешно, однако, когда я пытаюсь запустить метод Test. У меня была эта общая ошибкаWELD-001408 Невыполненные зависимости для типа [...] с квалификаторами [@Named]

org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [AutomatedTellerMachine] with qualifiers [@Named] at injection point [[field] @Named @Inject private advocacy.TestExample.automatedTellerMachine] 
    at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:274) 
    at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:243) 
    at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:106) 
    at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:126) 
    at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:345) 
    at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:330) 
.. 
.. 

Также я прочитал подобные вопросы отсюда ничего не помогло. Я читал некоторые примеры helloword об инъекции зависимостей отсюда cdi-tutorial, и после этого я начал читать arquillian-tutorial.

AutomatedTellerMachine.java

package advocacy; 

import java.math.BigDecimal; 

public interface AutomatedTellerMachine { 

    public void deposit(BigDecimal bd); 
    public void withdraw(BigDecimal bd); 
} 

AutomatedTellerMachineImpl.java

package advocacy; 

import javax.inject.Inject; 
import javax.inject.Named; 
import java.math.BigDecimal; 

@Named("atm") 
public class AutomatedTellerMachineImpl implements AutomatedTellerMachine { 

    @Inject 
    @Named("jsonRestAtmTransport") 
    private ATMTransport atmTransport; 

    ... 
} 

и мой метод испытания, как;

TestExample.java

package advocacy; 

imports.. 

@RunWith(Arquillian.class) 
public class TestExample { 

    @Inject 
    @Named("atm") 
    private AutomatedTellerMachine automatedTellerMachine; 

    @Deployment 
    public static WebArchive createTestArchive() { 
     return ShrinkWrap.create(WebArchive.class, "dependecy-injection.war") 
       .addClasses(AutomatedTellerMachine.class) 
       .addAsManifestResource(EmptyAsset.INSTANCE, "META-INF/beans.xml"); 
    } 


    @Test 
    public void test() { 
     automatedTellerMachine.deposit(new BigDecimal(12.99)); 
    } 
} 

мой beans.xml в src/main/resources/META-INF/beans.xml

Наконец, вы можете увидеть мой файл pom.xml here

ответ

2

Вы должны добавить AutomatedTellerMachineImpl.class к ShrinkWrap, как что:

@Deployment 
public static WebArchive createTestArchive() { 
    return ShrinkWrap.create(WebArchive.class, "dependecy-injection.war") 
      .addClasses(AutomatedTellerMachine.class) 
      .addClasses(AutomatedTellerMachineImpl.class) 
      .addAsManifestResource(EmptyAsset.INSTANCE, "META-INF/beans.xml"); 
} 

На практике лучше добавить непосредственно пакет, чтобы вы не пропустили все время.

 Смежные вопросы

  • Нет связанных вопросов^_^