【发布时间】:2018-04-15 23:15:48
【问题描述】:
我有一个具有结构的多模块项目:
app/
build.gradle
settings.gradle
app-web/
src/main/java/example/
Application.java
app-repository/
src/main/java/example/
CustomerRepository.java
Customer.java
src/test/java/example/
CustomerRepositoryTest
应用类:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
有仓库
@Repository
public interface CustomerRepository extends JpaRepository<Customer, Long> {
}
和存储库测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class CustomerRepositoryTest {
@Autowired
private CustomerRepository repository;
@Test
public void shouldSave() {
// When
final Customer saved = repository.save(new Customer());
// Then
assertThat(saved.getID()).isNotNull();
}
}
现在当我运行这个测试时,我得到了错误:
找不到@SpringBootConfiguration,需要使用 @ContextConfiguration 或 @SpringBootTest(classes=...) 与您的测试
当我的存储库模块中有 Application 类但我需要将它们分开时,这不会出现。让它发挥作用的最佳方法是什么?
如果它有助于我的 Spring 依赖项是:
compile("org.springframework.boot:spring-boot-starter-data-jpa")
compile("com.h2database:h2")
testCompile("org.springframework.boot:spring-boot-starter-test")
使用插件org.springframework.boot:spring-boot-gradle-plugin:1.5.8.RELEASE
【问题讨论】:
-
尝试将除
Application(包括测试)之外的所有类移动到单独的包(例如src/main/java/example/subpackage)。我记得当@SpringBootApplication和@SpringBootTest在同一个包中时,组件扫描存在问题。我认为这是一个已知问题,但找不到参考 -
@jannis 我仍然遇到同样的错误 :( 有没有办法告诉测试如何在没有
Application类的情况下配置它? -
@jannis 我感觉
@SpringBootTest是为 REST 层设计的,所以可能与此有关 -
将
@SpringBootTest换成@EnableAutoConfiguration测试结果为绿色,但我不知道为什么
标签: java spring spring-boot spring-boot-test spring-boot-configuration