我无法在 Spring 启动测试中自动装配服务 class

I can't autowire Service class in Spring Boot Test

我创建了使用 jdbc 处理数据库的 Dao 存储库。

我在我的服务 class 中自动装配了这个存储库。

然后我尝试在我的测试 class 中自动连接我的服务 class。

@SpringBootTest
public class ServiceTest {
   @MockBean
   private Dao dao;

   @Autowired
   private Service service;

   @Test
   void whenSomething_thanSomething() {
      when(Dao.getStatus(anyString())).thenReturn("green");
      assertEquals(0, service.getStatus(""));
   }

   //other tests...

}

@Service
public class Service {
   private DaoImpl daoImpl;

   @Autowired
   public Service(DaoImpl daoImpl) {
      this.daoImpl = daoImpl;
   }

   //...

}

@Repository
public class DaoImpl omplements Dao {
   private NamedParameterJdbcOperations jdbc;
   
   @Autowired
   public DaoImpl(NamedParametedJdbcOperations jdbc) {
      this.jdbc = jdbc;
   }

   //...

}

当我开始测试时,出现下一个错误:

Parameter 0 of constructor in Service required a bean of type DaoImpl that could not be found.

我该如何解决我的问题?

由于您在服务中注入 DaoImpl-class 您可能打算模拟 DaoImpl 而不是 Dao:

@SpringBootTest
public class ServiceTest {
   @MockBean
   private DaoImpl daoImpl;
   ...
}