报错 Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration (SpringBoot测试)
java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test SpringBoot测试报错
目录
报错:
java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration,
you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
省流:
main 和 test 需要同包名。
正文
一、同包名
test下的包名和main下的包名需要一致。
解读
通常测试类的代码如下:
@RunWith(SpringRunner.class)
@MybatisPlusTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Rollback(false)
public class T1 {
@Resource
private EmpMapper empMapper;
@Test
public void t1() {}
}
这样写的好处是,可以不用加载整个springboot组件,只加载spring和mybatis那块,测试数据库链路。
他会扫描并加载main包下的Mapper类和xml文件,还有实体类。这样一来就不需要另外再去写实体类和sql了。
想要在test目录下,正常使用main目录里的类,就需要保持目录的名字相同。
例如:
/main/java 下是 /com/ali/mapper/...
那么
/test/java 下也得是 /com/ali这个目录开头
具体使用,可以查看这篇文章:
junit单元测试 mybatis 单独测试 springboot_globalcoding的博客-CSDN博客
二、不同包名
在测试类加上 @SpringBootTest(classes = xxx.class) 这个注解。
@SpringBootTest(classes = T1.class)
@RunWith(SpringRunner.class)
@MybatisPlusTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Rollback(false)
public class T1 {
@Resource
private EmpMapper empMapper;
@Test
public void t1() {}
}
这个注解是告诉springboot这是一个独立的测试类(意味着IOC容器独立)。在包名不同时,需要在/test/java目录下把Mapper类和xml文件还有实体类全部写一遍。(包名相同的情况下不需要)
并且这个注解会启动大量组件。所以,如果不是做独立测试的情况下,并不推荐这样做。(通常不会做独立测试。通常都是测试数据库链路。)
三、其他写法
还有一种方法,但没试过:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {JPAConfig.class})
=======================分割线==========================
java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration,
you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
文章到此已经结束,以下是紫薯布丁
@RunWith(SpringRunner.class)
@MybatisPlusTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Rollback(false)
public class T1 {
@Resource
private EmpMapper empMapper;
@Test
public void t1() {}
}
@SpringBootTest(classes = T2.class)
@RunWith(SpringRunner.class)
@MybatisPlusTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Rollback(false)
public class T2 {
@Resource
private ClassMapper classMapper;
@Test
public void t2() {}
}
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {JPAConfig.class})
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)