【问题标题】:Unable to inject a @Service in a Spring Boot Test无法在 Spring Boot 测试中注入 @Service
【发布时间】:2019-06-01 23:03:46
【问题描述】:


将@Service 注入@SpringBootTest(Spring Boot 2 应用程序的一部分)时,我收到空指针异常。 下面是 Service 类的骨架:

@Service
public class CustomerService {

    public Customer insertCustomer(Customer customer){
        /* Logic here */ 
        return  customer;

    }

}

还有测试类:

@SpringBootTest
public class CustomerTest {


   @Autowired
   CustomerService service;

   @Test
    public void testDiscount() {
        Customer customer1 = new Customer("ABC"); 
        service.insertCustomer(customer1);   
        assertEquals(5, customer1.getDiscount());
    }

}

我是否遗漏了测试类中的任何其他注释以使其正常工作? 谢谢

【问题讨论】:

  • 你是如何启动这个测试类的?
  • @RunWith(SpringRunner.class)?
  • 你能发布完整的异常堆栈跟踪吗?

标签: spring-boot


【解决方案1】:

您应该在测试类级别添加@RunWith(SpringRunner.class) 以加载所有必要的bean。并且还要确保你的包名避免@ComponentScan注解。

所以你可以这样做:

在src/main/java下

package com.customer.service;

@Service
public class CustomerService {

   public Customer insertCustomer(Customer customer) {
        /* Logic here */ 
        return  customer;
   }
}

在src/test/java下

package com.customer.service;

@RunWith(SpringRunner.class)
@SpringBootTest
public class CustomerTest {

   @Autowired
   CustomerService service;

   @Test
   public void testDiscount() {
        Customer customer1 = new Customer("ABC"); 
        service.insertCustomer(customer1);   
        assertEquals(5, customer1.getDiscount());
   }
}

【讨论】:

  • 感谢您的帮助。我没有包含 @RunWith(SpringRunner.class) 因为 Eclipse 找不到它。我手动添加了“import org.springframework.test.context.junit4.SpringRunner;”现在它工作正常!
猜你喜欢
  • 2017-01-05
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2022-11-11
  • 2021-05-28
  • 1970-01-01
  • 2018-03-26
相关资源
最近更新 更多