A questão é que quando vou testar com JUnit ocorre o seguinte erro:
"Erro Tomcat"
mar 26, 2015 7:16:13 PM org.jboss.weld.bootstrap.WeldStartup <clinit>
INFO: WELD-000900: 2.2.9 (Final)
mar 26, 2015 7:16:13 PM org.jboss.weld.environment.deployment.discovery.DiscoveryStrategyFactory create
INFO: WELD-ENV-000020: Using jandex for bean discovery
mar 26, 2015 7:16:14 PM org.jboss.weld.bootstrap.WeldStartup startContainer
INFO: WELD-000101: Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously.
mar 26, 2015 7:16:14 PM org.jboss.weld.interceptor.util.InterceptionTypeRegistry <clinit>
WARN: WELD-001700: Interceptor annotation class javax.ejb.PostActivate not found, interception based on it is not enabled
mar 26, 2015 7:16:14 PM org.jboss.weld.interceptor.util.InterceptionTypeRegistry <clinit>
WARN: WELD-001700: Interceptor annotation class javax.ejb.PrePassivate not found, interception based on it is not enabled
Segue o Teste (um exemplo simples). Se eu rodo somente o primeiro teste, funciona!:
"Teste JUnit"
[code=Java]
@RunWith(Weld4JUnitRunner.class)
public class CategoriaRepositoryTest {
@Inject
private CategoriaRepository repository;
@Test
public void testCDI() {
assertNotNull(repository);
}
@Test
public void testListByNome() {
List categoriasDB = repository.listByNome("1");
List categoriasTest = new ArrayList();
Categoria categoria1 = new Categoria();
categoria1.setId(new Long(1));
categoria1.setNome("Categoria 1");
categoriasTest.add(categoria1);
assertEquals(categoriasTest, categoriasDB);
}
}[/code]
No Repository uso:
[code=Java]
@Inject
protected EntityManager em;[/code]
"Weld4JRunner"
[code=Java]
public class Weld4JUnitRunner extends BlockJUnit4ClassRunner {
public Weld4JUnitRunner(Class<?> klass) throws InitializationError {
super(klass);
}
protected Object createTest() {
final Class<?> test = getTestClass().getJavaClass();
return WeldContext.INSTANCE.getBean(test);
}
}[/code]
"WeldContext"
[code=Java]
public class WeldContext {
public static final WeldContext INSTANCE = new WeldContext();
private final Weld weld;
private final WeldContainer container;
private final RequestContext requestContext;
private WeldContext() {
this.weld = new Weld();
this.container = weld.initialize();
this.requestContext = container.instance().select(RequestContext.class, UnboundLiteral.INSTANCE).get();
this.requestContext.activate();
Thread thread = new Thread() {
public void run() {
RequestContext requestContext = container.instance().select(RequestContext.class, UnboundLiteral.INSTANCE).get();
requestContext.activate();
}
};
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
this.weld.shutdown();
}
public T getBean(Class type) {
return container.instance().select(type).get();
}
}
[/code]
Já tentei alguns tutoriais na net mas nada. O que estaria faltando?