经典三层框架初识(二)---Spring 2.4 spring整合Junit

一.Junit

  • Junit简介

    • JUnit是一个Java语言的单元测试框架,用于单元测试.
    • 以前我们测试的时候,一般是单独创建一个测试类,在里面写一个main方法来测试我们的程序,但是实质上这样用main来做测试是不规范的,因为main方式它是一个应用程序的入口,它应该作为主逻辑来运行的,而我们的测试是辅助来做的.其次,一个类只有一个main方法(入口),如果我们现在有很多的代码需要测试怎么办?以前我们是封装成很多方法,依次在main里面调用或者是在main里面测试完一个注释掉写下一个,那这样很麻烦也有很多限制.而 Junit 能很好的解决这个问题,简化单元测试,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。
  • Junit的使用

    • 前提是我们需要导入Junit的jar包.我们用的eclipse中已经继承了Junit了,不需要我们去下载jar啦
    • 基本步骤:
      • ①:选中项目,右键Build Path--->Add Libraries...
      • ②:弹出来的Add Library界面中,找到 JUnit并选中,点击 next
      • ③:弹出的JUnit Library界面,我们在下来框中选择JUnit4,最后点击finish就可以了.
    • 下面我们看一下代码
    • 下面是我们需要测试的类:
      • package test;
        
        public class Test2 {
        	
        	public void f(){
        		System.out.println("test");
        	}
        }
        

        如果我们需要测试上面的f方法,以前我们是下面这么做的:

      • 	public static void main(){
        		Test2 test2 = new Test2();
        		test2.f();
        	}

        现在我们不用main方法,使用Junit来测试:

      • 我们只需要将需要测试的方面上面加上@Test即可.然后鼠标放在需要测试的方法中,右键,Run As ---->JUnit Test.

         
        package test;
        
        import org.junit.Test;
        
        public class Test2 {
        	@Test
        	public void f(){
        		System.out.println("test");
        	}
        	
        }
        

        运行结果出现如下的绿色横条,则测试通过,红色横条,则测试失败

      •  

    • 上面是简单模拟Junit的使用,这里介绍Junit的几个常用的类似于@Test的注解:

      • @Before: 每一个测试方法之前运行
      • @After: 每一个测试方法之后运行
      • @BeforeClass: 方法必须必须要是静态方法(static 声明),所有测试开始之前运行,注意区分before,是所有测试方法
      • @AfterClass: 方法必须要是静态方法(static 声明),所有测试结束之后运行,注意区分 @After
      • @Ignore: 被忽略的测试方法:加上之后,暂时不运行此段代码
    • 例如上面的例子,我们希望每个测试的方法前面都要先打印before,那么我们可以下面这样
    •   
    • 注意:编写测试类的原则:

      • ①测试方法上必须使用@Test进行修饰
      • ②测试方法必须使用public void 进行修饰,不能带任何的参数
      • ③新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开
      • ④测试类所在的包名应该和被测试类所在的包名保持一致
      • ⑤测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
      • ⑥测试类使用Test作为类名的后缀(不是必须)
      • ⑦测试方法使用test作为方法名的前缀(不是必须)
  • 二.Spring整合Junit

    • 下面看我们下面的代码
    • package test;
      
      import org.springframework.beans.factory.annotation.Autowired;
      
      import service.UserService;
      
      public class Test {
      	@Autowired
      	UserService servie;
      	
      	@org.junit.Test
      	public void test(){
      	    servie.addUser();
      	    servie.deleteUser();
      	}
      	
      	/*public static void main(String[] args) {
      
      		ApplicationContext ac = 
      				new ClassPathXmlApplicationContext("applicationContext.xml");
      		UserService service = ac.getBean("userservice", UserService.class);
      		service.addUser();
      		service.deleteUser();
      	}*/
      
      }
      

      上面的代码时我们前面从容器获取UserService对象用到的.我们有这样的思考,UserService这个对象我们的spring中上下文已经通过对包的扫描得到了(也就是它已经在我们的容器中被管理了),那我们能否不需要main方法,通过Junit和依赖注入的方式测试test这个方法呢?但是上面的代码能否运行成功呢?答案肯定是不能的.因为我们要把UserService这个成员变量注入的话,有个前提是我们得先把上下文加载了.这里面上下文都没有呢,怎么注入呢?这个时候我们就可以使用spring整合Junit,让它来实现上下文的加载然后再注入.  

    • spring整合Junit的前提:需要导入一个spring-test-XX.jar的jar包.

      package 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 service.Userservice;
      
      @RunWith(SpringJUnit4ClassRunner.class)//执行器
      @ContextConfiguration(locations="classpath:applicationContext.xml")//加载配置文件,咱们的配置文件在src下,所以这里写classpath
      public class Test {
      
      	@Autowired
      	Userservice service;
      	
      	@org.junit.Test
      	public void test(){
      		service.addUser();
      		service.deleteUser();
      	}
      }
      

      这里注意两点:我们的执行器是spring整合Junit的执行器;另外一个在我们注入成员变量的对象之前,要加载配置文件,因为加载了配置文件,才回去扫描这个对象是否在我们容器中管理,只有在管理了并且拿到这个容器之后才能注入.

猜你喜欢

转载自blog.csdn.net/XiaodunLP/article/details/83475307