junit单元测试中没有main方法也能执行
junit集合了一个main方法
该方法就会判断当前测试类中有哪些方法有@Test方法
junit就会让有@Test的方法执行
junit不会管我们有没有采用spring框架
在执行测试方法时,junit根本不知道我们是不是采用了spring框架
所以也就不会为我们读取配置文件/配置类 创建spring核心容器
由以上三点可以知道:
当测试方法执行时,没有Ioc容器,就算写了@Autowired注解,也无法实现注入
使用Junit单元测试,测试我们的配置
Spring整合junit的配置
导入spring的整合jubit的jar包
使用junit提供的注解把原有的main方法替换下来,替换成spring提供的 @Runwith
告知spring的运行器,spring和ioc创建是基于xml还是注解,并且说明位置 @ContextConfiguration
locations : 指定xml文件的位置,加上classpath关键字,表示在类路径下
classes : 指定注解所在的位置
举例子:
package com.xuefei.ui; import com.xuefei.domain.Account; import com.xuefei.service.IAccountService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.util.List; /** * 空指针异常情况 */ public class UITest { @Autowired IAccountService accountService; @Test public void test1() { // ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); // IAccountService accountService = (IAccountService) applicationContext.getBean("accountService"); List<Account> accounts = accountService.findAll(); for (Account account : accounts) { System.out.println(account); } } }
解决:
package com.xuefei.ui; import com.xuefei.config.SpringConfiguration; import com.xuefei.domain.Account; import com.xuefei.service.IAccountService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.util.List; /** * 整合Junit */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:beans.xml"}) public class UITest { //注入accountService实例 @Autowired IAccountService accountService; @Test public void test1() { // ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); // IAccountService accountService = (IAccountService) applicationContext.getBean("accountService"); List<Account> accounts = accountService.findAll(); for (Account account : accounts) { System.out.println(account); } } }
原文:https://www.cnblogs.com/lililixuefei/p/11894768.html