【问题标题】:JUNIT Autowired instance is always nullJUNIT Autowired 实例始终为空
【发布时间】:2019-11-04 11:17:59
【问题描述】:

我正在尝试为以下类编写测试用例,其中每次 myConfig 实例都为空。有什么方法可以传递自动装配的实例。

public class MyClass {

@Autowired
MyConfig myConfig ;

public Properties getUnAckMessage(String queueName) {
    Properties prop=new Properties() 
        URL url = new URL(StringUtils.join(myConfig.getQueueHost(),
                    myConfig.getQueueURL(),myConfig.getQueueVm(),queueName));

    return prop;            
    }

public  Properties request(String queue) {           
        return getUnAckMessage(queue);
    }
}

public class Main {

  public void method() {
  MyClass myClass=new MyClass();
  myClass.getUnAckMessage("test");
  }
 }

测试用例

@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {

 @MockBean
MyConfig myConfigReader;




@Test
    public void testMyClass() {      
        MyClass  propertiesExchangeManager1 = new MyClass ();
        propertiesExchangeManager1.request("test");
      } 
    }

【问题讨论】:

    标签: java spring junit mockito


    【解决方案1】:

    如果您希望 Spring 自动装配,您必须为您的测试激活 Spring。例如:

    @RunWith(SpringRunner.class)
    public class Test {
    
        @Autowired private MyClass myClass
    
        @Test
        public void test() {
            ///...
        }
    }
    

    如果你自己实例化 MyClass 类,Spring 无法注入需要的类。你应该像这样修改你的测试:

    @RunWith(MockitoJUnitRunner.class)
    public class MyClassTest {
    
        @MockBean
        MyConfig myConfigReader;
    
        @Autowired
        MyClass propertiesExchangeManager1;
    
    
        @Test
        public void testMyClass() {
            propertiesExchangeManager1.request("test");
        }
    }
    

    【讨论】:

    • 我收到以下异常 org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为 'com.test.MyClassTest' 的 bean 时出错:通过字段 'myConfigReader' 表达的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有“com.test.reader.MyConfigReader”类型的合格 bean 可用:预计至少有 1 个有资格作为自动装配候选者的 bean。依赖注解:
    • 此异常表明 MyConfigReader 类型的 bean 无法自动装配。确保这个类用'@Service''@Component'或类似的注解注释,以便spring能够创建一个实例。
    • 它存在于类中,但仍然会出现异常,顺便说一句,它被 MyClass 消耗,但在测试类中的情况不同,是否可以使用 Mockito。
    • 是的,您可以将 mockito 与 '@Mock' 和 '@InjectMocks' 一起使用。检查mkyong.com/spring-boot/spring-boot-junit-5-mockito
    • 编辑了我的帖子。
    猜你喜欢
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2017-05-08
    • 1970-01-01
    相关资源
    最近更新 更多