美文网首页Spring cloudspring boot
框架小知识-Spring单元测试(classpath到底在哪里)

框架小知识-Spring单元测试(classpath到底在哪里)

作者: 小胖学编程 | 来源:发表于2019-04-07 21:34 被阅读18次

在使用Spring项目做单元测试时,测试类的注解的含义。

idea小技巧:可以通过Ctrl+Shift+T来直接创建测试类。

1. 测试方法注解的含义

1.1 Spring整合Junit

maven依赖:

 <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

测试类源码:

@RunWith(SpringJUnit4ClassRunner.class)
@Transactional(transactionManager = "transactionManager")
@Rollback(value=false)
@ContextConfiguration(locations = {"classpath*:/applicationContext.xml"})
public class MultiThreadTest {

    @Autowired
    private ClassA classA;

    @Test
    public void testsetAsyncMethods() {
        classA.setAsyncMethods();
    }
}

含义解释:

  1. RunWith注解:就是一个运行器,指定测试方法在哪里运行的,默认的配置是:SpringJunit4ClassRunner.class类。即Spring测试环境。

    • RunWith(JUnit.class)就是使用JUnit来运行。

    • RunWith(SpringJunit4ClassRunner.class)让测试运行于Spring测试环境。

    • RunWith(Suite.class)的话就是一套测试集合。

  2. ContextConfiguration注解:导入配置文件。

    • @ContextConfiguration(Locations="../applicationContext.xml") 导入配置文件路径。
    • @ContextConfiguration(classes = SimpleConfiguration.class)导入配置文件的class类。
  3. Transactional注解:声明事务管理器。配合@Rollback注解使用。

    • @Rollback(value=true),那么表示测试时如果涉及到数据库操作,那么测试完毕,该操作会回滚,不会改变数据库内容。

    • @Rollback(value=flase)`,那么表示测试时如果涉及到数据库操作,那么测试完毕,测试的内容中对数据库的操作会真实的执行到数据库中,不会回滚。

1.2 SpringBoot整合Junit

1.2.1 SpringBoot对Service实现单元测试

1. maven依赖

      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>  

2. 测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class LearnServiceTest {

    @Autowired
    private LearnService learnService;

    @Test
    public void getLearn(){
        LearnResource learnResource=learnService.selectByKey(1001L);
        Assert.assertThat(learnResource.getAuthor(),is("嘟嘟MD独立博客"));
    }
}

2. classpath路径的含义


需要注意的是:@ContextConfiguration若是导入多个文件,可以使用{},即@ContextConfiguration(locations = { "classpath*:/spring1.xml", "classpath*:/spring2.xml" })而且可以使用classpath路径

classpath路径到底指的是什么?

  1. src路径下的文件在编译后就会放到WEB-INF/class路径下面,默认的classpath就是在这里。(敲黑板,划重点)直接放到WEB-INF/下的话是不在classpath下的。
  2. 用maven构建项目时,resources目录就是默认的classpath。

classpath和classpath*的区别?
* classpath只会在class路径下查找文件;classpath*不仅包含class路劲,还包括jar文件中(class路径)进行查找。
* 在多个classpath中存在同名资源,都需要加载时,那么classpath只会加载第一个;classpath*都会加载。

推荐阅读
Spring Boot干货系列:(十二)Spring Boot使用单元测试

junit的标签

相关文章

网友评论

    本文标题:框架小知识-Spring单元测试(classpath到底在哪里)

    本文链接:https://www.haomeiwen.com/subject/dzdeiqtx.html