• junit单元测试+junit与Spring结合


    配置:右键要加入单元测试的工程,选择properties,然后选择java build path,选择add library,选择junit即可。

    编写:右键要测试的class,new一个junit test case,更改其source folder,next之后可选择要测试的class中的要测试的方法,则可自动生成。

    运行:右键要运行单元测试的class,选择junit即可。

    测试套件测试:

    1.测试套件就是组织测试类一起运行的。

    2.写一个作为测试套件的入口类,这个类里不包含其他的方法,更改测试运行器Suite.class,将要测试的类作为数组传入到Suite.SuiteClasses({}),即如下图:

    参数化设置测试:

    1.更改默认的测试运行器为@RunWith(Parameterized.class)

    2.声明变量来存放预期值和结果值

    3.声明一个返回值为Collection的公共静态方法,并使用@Parameters进行修饰

    4.为测试类声明一个带有参数的公共构造函数,并在其中为之声明变量赋值。示例代码如下图:

    注意:

    1.单元测试代码最好与业务代码分开,对于每一个要测试的class,所生成的单元测试的class,两者包名要保持一致。

    2.测试方法必须用@Test进行修饰。

    3.测试方法必须使用public void进行修饰,不能带任何参数。

    4.测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖。

    5.测试类最好使用Test作为类名的后缀。

    6.测试方法最好使用test作为方法名的前缀。

    流程点:

    1.@BeforeClass修饰的方法会在所有方法被调用前被执行,而且该方法时静态的,所以当测试类被加载后接着就会运行它,而且在内存中它只会存在一份实例,它比较适合加载配置文件。

    2.@AfterClass所修饰的方法通常用来对资源的清理,如关闭数据库的链接。

    3.@Before和@After会在每个测试方法的前后各执行一次。

    4.@Ignore所修饰的测试方法会被测试运行器忽略。

    5.@RunWith可以更改测试运行器

    UnitTestBase的写入:

     1 public class UnitTestBase {
     2     private ClassPathXmlApplicationContext context;
     3     private String springXmlpath;
     4     public UnitTestBase() {};
     5     
     6     public UnitTestBase(String springXmlpath) {
     7         this.springXmlpath = springXmlpath;
     8     }
     9     
    10     @Before
    11     public void before() {
    12         if(StringUtils.isEmpty(springXmlpath)) {
    13             springXmlpath = "classpath*:spring-*.xml";//配置文件路径通过构造函数传入,
    14         }
    15         try {
    16             context = new ClassPathXmlApplicationContext(springXmlpath.split("[,\s]+"));//创建spring的容器context
    17             context.start();//启动后查找配置文件里面配置的信息,并解析这些文件,然后装载到spring的上下文,即context里,
    18         } catch(BeansException e) {
    19             e.printStackTrace();
    20         }
    21     }
    22     
    23     @After
    24     public void after() {
    25         context.destroy();
    26     }
    27     
    28     @SuppressWarnings("unchecked")
    29     protected <T extends Object> T getBean(String beanId) {
    30         return (T)context.getBean(beanId);//通过getBean方法获取相应的对象,而这里的beanId即是子类中传入的oneInterface,也在spring-ioc.xml文件中配置过的bean
    31     }
    32     
    33     protected <T extends Object> T getBean(Class<T> clazz) {
    34         return context.getBean(clazz);
    35     }
    36     
    37 }
    View Code

    @Before也就是执行之前的内容,先加载配置文件,而配置文件的路径,从UnitTestBase的子类中通过构造方法获取,这里的classpath*:spring-*.xml是匹配所有以spring-开头的xml文件。创建Spring的容器,这里也就是context,当其启动后,会查找配置文件中的信息,并将信息加载到context容器中,当要使用这些信息时,可以用getBean方法获取到相应的对象,其中getBean的参数名称应该是xml中配置过的对象名称,这里也就是injectionService,这里不能直接get到injectionDao,至于原因?还未解。。。而getBean相对于new最大的好处就是,不用每次要用到某个对象的时候都去创建,而是直接获取就好了,而且如果当前这个bean对应的A类要换成B类,也比较方便。

    UnitTestBase的子类的写入:

     1 @RunWith(BlockJUnit4ClassRunner.class)
     2 public class TestOneInterface extends UnitTestBase {
     3 
     4     public TestOneInterface() {
     5         super("classpath*:spring-ioc.xml");
     6     }
     7     
     8     @Test
     9     public void test() {
    10         OneInterface oneIn = super.getBean("oneInterface");
    11         System.out.println(oneIn.hello("my parameters..."));
    12     }
    13 
    14 }
    View Code
  • 相关阅读:
    全站HTTPS底层实现原理
    python十个实战项目
    CP30,DBCP数据源配置
    FileUtils
    我的HttpClients工具
    Hibernate如何一个类映射两个表
    SSH2中实例化不了Action的一个原因
    二进制实现权限的分配管理
    myclips常用快捷键
    Hibernate 的*.hbm.xml文件的填写技巧
  • 原文地址:https://www.cnblogs.com/cing/p/7413235.html
Copyright © 2020-2023  润新知