spring-test框架(注解)学习手札一

1、@RunWith:  测试运行器,JUnit所有的测试方法都是由测试运行器负责执行。

(1)@RunWith(Suite.class)

其作用是使用JUnit执行一个测试套件。Suite类是JUnit自带的,意为套件,顾名思义,就是一套东西。通过它,可以把多个相关的测试类看做一个测试套件一起测试。

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({ TestA.class, TestB.class, /*Any test class you want to run*/})
public class TestSuite {
    // Please note this case won't run. It will only run cases which
    // are configured in @Suite.SuiteClasses
    @Test
    public void testPrint() {
        System.out.println("Hello");
    }
}

@RunWith指定了Suite类,说明这个TestSuite类是一个套件。通过@Suite.SuiteClas0

ses指定了要执行的测试类(这些类中的所有用例都会执行)。

需要注意的是,这个TestSuite类本身用例则不会执行了(如上面的testPrint()方法)。

(2)@RunWith(SpringJUnit4ClassRunner.class)

关于Spring项目的单元测试的同学可能见过这样的写法,就是用JUnit加载Spring的配置文件以完成Context的初始化,然后从Context中取出Bean并完成测试:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
public class UserManagerTest {
  @Autowired
  ApplicationContext ctx;

  @Test
  public void testAddUser() {
    try {
      UserManager userManager = ctx.getBean(UserManager.class); 
      userManager.addUser();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 }

//涉及mock测试
package test.controller.LogsController;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.naton.controller.LogsController;
import com.naton.pojo.example.ParamExample;
@RunWith(SpringJUnit4ClassRunner.class)  //使用junit4进行测试  
@ContextConfiguration({"classpath:applicationContext.xml"})
public class SearchTest {
    @Autowired
    LogsController longogsController;
    
    @Test
    public void testGetList() {
        ParamExample param = new ParamExample();
        longogsController.search(param);
    }

}

参考:http://sparkgis.com/java/2017/10/junit高级用法之runwith-原-junit高级用法之runwith-摆渡者/

 2、@ContextConfiguration  引入配置文件,Spring-Test的这个配置只认classpath,很无奈,我必须拷贝这些文件到根目录!

单个文件:

@ContextConfiguration({"classpath:applicationContext.xml"})

@ContextConfiguration(locations = { "classpath:applicationContext.xml" })

@ContextConfiguration(classes = SimpleConfiguration.class)

多个文件时,可用{}:

@ContextConfiguration(locations = { "classpath*:/spring1.xml", "classpath*:/spring2.xml" })

@ContextConfiguration(classes = {AppConfig.class, TestAppConfig.class})

3、@Autowired:是一种函数,可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作

例:

@Autowired
AnnController    annController;//类对象

@Autowired   private AnnService annService; //AnnService是接口

@Autowired
@Qualifier("BMW")      //括号里这个是实现的子类的类名
private Car car; //car接口有多个实现类,要表明是个子类

4、@Transactional

     @TransactionConfiguration:事物配置

     (transactionManager = "transactionManager", defaultRollback = true)

    这里的事务关联到配置文件中的事务控制器(transactionManager = "transactionManager"),同时指定自动回滚(defaultRollback = true)。这样做操作的数据才不会污染数据库!

@BeforeTransaction

表明被注解的public void方法应该在测试方法的事务开始之前执行, 该事务是通过@Transactional注解来配置的。

@AfterTransaction

表明被注解的public void方法应该在测试方法的事务结束之后执行, 该事务是通过@Transactional注解来配置的。

5、@NotTransactional:表明测试方法必须不在事务中执行。

6、@Repeat

表明被注解的测试方法必须重复执行。执行的次数在注解中声明。

注意重复执行范围包括包括测试方法本身的执行,以及任何测试fixture的set up或tear down。

@Repeat(10)
public void testProcessRepeatedly() {
// …

}



参考:https://www.cnblogs.com/minideas/archive/2011/07/21/2112964.html

         http://snowolf.iteye.com/blog/588351#comments


你可能感兴趣的:(软件测试)