Spring进阶案例之注解和IoC案例 (6)

在测试类中,获取Spring的IoC容器和AccountService对象时,我们一直都是手动获取。有没有办法让Spring为我们自动注入呢?当然是有的,但是如果直接没有在accountService成员变量之上,加上@Autowired注解,运行就会报错。这是因为:

1.Junit单元测试中,没有main方法也能执行。因为Junit集成了一个main方法,该方法会判断当前测试类中哪些方法有@Test注解,Junit就会执行有@Test注解的方法。 2.Junit不会管用户使用何种框架,因此在执行测试方法是,junit不知道用户是否使用Spring框架,所以也就不会读取配置文件/配置来创建Spring的IoC核心容器。因此在测试类中,就算写了@Autowired注解,也无法实现注入。

因此要在Junit中使用Spring,就要遵循一下步骤:

1.导入Spring整合junit的配置

在pom.xml配置文件中<dependencies>的导入:

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.5.RELEASE</version> </dependency> 2.使用Junit提供的@RunWith注解,将原有的main方法替换为Spring提供的main方法

在AccountServiceTest类之上加上@RunWith(SpringJUnit4ClassRunner.class)注解

3.告知Spring的运行器,是基于xml还是注解进行配置,并说明位置

在AccountServiceTest类之上加上@ContextConfiguration(classes = SpringConfig.class)注解。对于@ContextConfiguration注解,属性locations用于指定xml配置文件的位置,要加上classpath关键字表示在类路径下,属性classes:指定配置类所在的位置。

4.注意事项

当Spring的版本是5.x时,junit的版本必须是4.12及以上版本。最终整个测试类代码如下:

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SpringConfig.class) public class AccountServiceTest { @Autowired private IAccountService accountService; @Test public void testFinaAll() { //3.执行方法 List<Account> accounts = accountService.findAllAccounts(); for (Account account : accounts) { System.out.println(account); } } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpddgy.html