首页 文章

WELD-001408类型[Logger]与注入点[[field]使用arquillian的限定符[@Default]不满意的依赖关系

提问于
浏览
1

我正在使用arquillian网站上的Greeter示例运行基本的arquillian单元测试 . 唯一的区别是我在Greeter.java中的greet(PrintStream to,String name)函数中执行了log.debug . 我使用slf4j进行日志记录 .

Greeter.java

package org.arquillian.example;
import java.io.PrintStream;

import javax.inject.Inject;

import org.slf4j.Logger;

public class Greeter {

@Inject
private Logger log;

    public void greet(PrintStream to, String name) {
        log.debug("Greeter Testing");
        to.println(createGreeting(name));
    }

    public String createGreeting(String name) {
        return "Hello, " + name + "!";
    }   

}

GreeterTest.java

package org.arquillian.example;

import javax.inject.Inject;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;


@RunWith(Arquillian.class)
public class GreeterTest {

    @Inject
    Greeter greeter;    


    @Deployment
    public static JavaArchive createDeployment() {
        return ShrinkWrap.create(JavaArchive.class)
            .addClass(Greeter.class)
            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
    }

    @Test
    public void should_create_greeting() {

        Assert.assertEquals("Hello, Earthling!",
            greeter.createGreeting("Earthling"));
        greeter.greet(System.out, "Earthling");
    }   

}

获得WELD-001408运行测试时,在注入点[[field] @Inject private org.arquillian.example.Greeter.log]错误的类型[Logger]的类型[Logger]的不满意依赖性 . 有人可以帮忙吗?

4 回答

  • 3

    这是一个CDI问题 . 您首先没有 Logger 的制作人 .

    其次,任何此类 生产环境 者都应添加到ShrinkWrap部署中 .

    Logger的 生产环境 者通常是这样编写的:

    import javax.enterprise.inject.Produces;
    import javax.enterprise.inject.spi.InjectionPoint;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class SLF4JProducer {
    
      @Produces
      public Logger producer(InjectionPoint ip){
        return LoggerFactory.getLogger(
          ip.getMember().getDeclaringClass().getName());
      }
    }
    

    该生成器接收注入点并继续返回SLF4J Logger 实例 . 该实例与包含注入点的类具有相同的名称 .

  • 0

    还将bean.xml bean-discovery-mode更改为all

    bean-discovery-mode="all"
    
  • 12

    当我使用LoggerFactory时,它没有注入Logger,对我来说效果很好 .

    private Logger log = LoggerFactory.getLogger(Greeter.class);
    
  • 0

    在我的情况下,我必须以编程方式提供注射

    进口:

    import org.slf4j.Logger;
           import org.slf4j.LoggerFactory;
    

    初始化

    private Logger logger;
    
            @Inject
            public LoggingInterceptor() {
                logger = LoggerFactory.getLogger(LoggingInterceptor.class);
            }
    

相关问题