【发布时间】:2020-04-30 08:49:51
【问题描述】:
我有以下项目结构:
-module1
--src/main/java/at.flobau.demo.module1
---model
----Product.java
---service
----ProductService.java
---TestConfiguration.java
--src/test/java/at.flobau.demo.module1.service
---ProductServiceTest.java
-module2
--src/main/java/at.flobau.demo.main
---MainApplication.java
Application 类如下所示:
@SpringBootApplication(scanBasePackages = {"at.flobau.demo.main"})
@PropertySource(value = "classpath:application.properties")
@EnableJpaRepositories("at.flobau.demo.module1")
@EntityScan(basePackages = {"at.flobau.demo.module1"})
public class PocApplication {
public static void main(String[] args) {
SpringApplication.run(PocApplication.class, args);
}
}
服务如下所示:
@Service
public class ProductService implements IProductService {
@Autowired
private IProductRepository productRepository;
...
}
测试类如下所示:
@SpringBootTest
@ContextConfiguration(classes = { TestConfiguration.class }, loader =
AnnotationConfigContextLoader.class)
@RunWith(SpringRunner.class)
public class ProductServiceTest {
@Autowired
private ProductService productService;
...
}
测试配置文件如下所示:
@Configuration
@ComponentScan("at.flobau.demo")
public class TestConfiguration{ }
IntelliJ 告诉我,测试中的 ProductService 无法自动装配。当我运行测试时,我得到一个异常:
Error creating bean with name 'ProductServiceTest': Unsatisfied dependency expressed through field
'productService'; nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type
'at.flobau.demo.module1.products.service.ProductService' available: expected at least 1 bean which
qualifies as autowire candidate. Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}
【问题讨论】:
-
我得到了一个示例应用程序,其中包含使用 mockito github.com/naveenkulkarni029/products-api 的 junit 测试用例程序
-
尝试将 ProductService 的包名显式添加到配置类中的 @ComponentScan("at.flobau.demo") 中
-
主类在module2中,所以module1独立不是spring boot应用程序,尝试将@SpringBootConfiguration添加到你的测试配置中。 [stackoverflow.com/questions/39858226/… 参考这个答案。
标签: java spring spring-boot junit