java在执行JpaTest时找不到@SpringBootConfiguration
我是框架新手(刚通过课程),这是我第一次使用SpringBoot
我正在尝试运行一个简单的Junit测试,看看我的CrudePositories是否真的有效
我经常遇到的错误是:
Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test java.lang.IllegalStateException
SpringBoot不是自己配置的吗
我的测试班:
@RunWith(SpringRunner.class)
@DataJpaTest
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class JpaTest {
@Autowired
private AccountRepository repository;
@After
public void clearDb(){
repository.deleteAll();
}
@Test
public void createAccount(){
long id = 12;
Account u = new Account(id,"Tim Viz");
repository.save(u);
assertEquals(repository.findOne(id),u);
}
@Test
public void findAccountByUsername(){
long id = 12;
String username = "Tim Viz";
Account u = new Account(id,username);
repository.save(u);
assertEquals(repository.findByUsername(username),u);
}
我的Spring Boot应用程序启动程序:
@SpringBootApplication
@EnableJpaRepositories(basePackages = {"domain.repositories"})
@ComponentScan(basePackages = {"controllers","domain"})
@EnableWebMvc
@PropertySources(value {@PropertySource("classpath:application.properties")})
@EntityScan(basePackages={"domain"})
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
}
}
我的存储库:
public interface AccountRepository extends CrudRepository<Account,Long> {
public Account findByUsername(String username);
}
}
# 1 楼答案
在我的例子中,应用程序类和测试类的包是不同的
及
让他们同意后,测试运行正常
# 2 楼答案
事实上,Spring Boot在大部分情况下都会自行设置。您可能已经可以删除发布的许多代码,尤其是在
Application
中我希望您已经包含了所有类的包名,或者至少是
Application
和JpaTest
的包名。关于@DataJpaTest
和一些其他注释的事情是,它们在当前包中查找@SpringBootConfiguration
注释,如果在那里找不到,则遍历包层次结构,直到找到它为止例如,如果测试类的完全限定名为
com.example.test.JpaTest
,而应用程序的完全限定名为com.example.Application
,那么测试类将能够找到@SpringBootApplication
(其中,@SpringBootConfiguration
)但是,如果应用程序位于包层次结构的另一个分支中,比如
com.example.application.Application
,它将而不是找到它范例
考虑下面的Maven项目:
然后在
Application.java
中显示以下内容:然后是
JpaTest.java
的内容:一切都应该正常。如果在
src/main/com/example
内创建一个名为app
的新文件夹,然后将Application.java
放在其中(并更新文件内的package
声明),运行测试将出现以下错误:# 3 楼答案
配置已附加到应用程序类,因此以下内容将正确设置所有内容:
JHipster项目here中的示例
# 4 楼答案
值得检查的是,您是否重构了用
@SpringBootApplication
注释的主类的包名。在这种情况下,testcase应该在一个合适的包中,否则它将在旧的包中查找它。我就是这样# 5 楼答案
除了Thomas Kåsene所说的,您还可以添加
如果您不想重构文件层次结构,请访问测试注释,以指定它应该在何处查找其他类。这就是错误消息的提示,它说:
# 6 楼答案
这对我有用
上述测试类的包名更改为与普通类的包名相同
换成这个