JUnit测试工具

junit是什么,有什么作用,常用注解,测试套件,测试数组,与spring和hibernate的整合。

课程总结
(1)@Test
(2)@Test(Timeout=毫秒),@Test(expected=异常类)
(3)@Ignore
(4)@RunWith
(5)@BeforeClass @AfterClass @Before @After
(6)测试套件@RunWith(Suite.class)
(7)参数化设置@RunWith(Parameterized.class)
(8)Spring与Hibernate的整合

JUnit3:不支持注解,必须继承junit.framework.TestCase这个类,且命名必须是test开头
JUnit4:只要加上@Test注解即可,不需要继承任何类,命名没有限制

Junit4和Junit3的区别:

1.Junit3中的所有方法都必须使用@Test注解
2.Junit3需要在方法名前加test作为前缀
3.Junit3必须继承junit.framework.TestCase类
4.Junit3中测试前必须用SetUp,测试后必须用TearDown

断言机制:将程序预期的结果与程序运行的最终结果进行比对,确保对结果的可预知性。
hamcrest-core设置匹配集规则的框架,可用来增强junit的功能。
JUnit3:必须继承junit.framework.TestCase这个类,在方法前面必须加上test最为前缀。
JUnit4:只要加上@Test注解即可,不需要继承任何类,命名没有限制。

Junit4总结
测试用例的包名和被测试类包名一致,测试类放在test目录下。在每个测试方法前写test方法名更规范。更多方法进行测试时:在测试类上右键,新建一个junit Test Case,更改源代码目录browse,选择test,名字修改,next,选择所要方法,点击finish

1:测试方法上必须使用@Test进行修饰
2:测试方法必须使用public void进行修饰,不带任何的参数
3:新建一个源代码目录来存放我们的测试代码
4:测试类的包应该和被测试类保持一致
5:测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
6:测试类使用Test作为类名的后缀(不是必须的)
7:测试方法使用test作为方法的前缀(不是必须的)

测试结果出现的俩种错误
1.一种是被测程序错误,
2.一种是自己的测试代码出现错误

1.Failure一般由单元测试使用的断言方法判断失败引起的,这经表示测试点发现了问题
这就是说程序输出的结果和我们预期不一致
2.error是由代码异常引起的,他可以产生于测试代码本身的错误,也可以是被测试代码中的一个隐藏的bug
3.测试用例不是用来证明你是对的 而是用来证明你没有错

Failure代表断言方法中的预期结果和实际结果不同
Error是由代码异常引起的,可以是测试代码出现异常,也可能是被测试代码抛出异常

JUnit注解

@Test标注测试方法,不被标注是不会被测试运行的
@Test(expected=XX.class)检查被测方法是否抛出XX异常,只有抛出该异常时才算成功,其他所有情况都是失败或错误
@Test(timeout=毫秒),检查被测方法是否在指定时间内运行结束,如果超时则错误
@Ignore可以让测试运行器忽略被标记的方法不运行,且可以通过@Ignore(“..”)提供备注、告知为何进行忽略
@RunWith指定测试方法通过哪个测试运行器运行(默认的测试运行器足够完成大部分功能)。自定义的测试运行器需要通过继承org.junit.runner.Runner

Junit测试套件的使用
1.测试套件就是组织测试类一起运行的。
2.写一个作为测试套件的入口类,这个类不能含有其他方法
3.更改测试运行器Suit.class
4.将要测试的类作为数组传入到Suite.SuiteClass({})

测试套件:如果测试类过多,分开运行过于繁琐,Junit提供测试套件Suite把这些类集合在一个测试套件中,进行批量运行(Suite是一个测试运行器,.class文件)

测试套件的使用:前提,测试套件的入口类不应该有其他方法(因为不会被执行)
1、创建一个测试类(可以是任意名字,但最后命名为SuiteTest)
2、使用@Runwith(Suite.class)更改测试运行器为测试套件
3、使用@SuiteClasses({测试类1、测试类2})注解,把需要批量运行的测试类放入
(不一定就要和截图一样用@Suite.@SuiteClasses来使用)

@RunWith(Suite.class)
@Suite.suiteClasses({TaskTest.class,TaskTest2.class})
空类

Junit4的参数化设置一次测试多组数据

@RunWith(Parameterized.class)
public class ParamTest {
  int expected = 0;
  int input1 = 0;
  int input2 = 0;

  @Parameters
  public static Collection<Object[]> t() {
    return Arrays.asList(new Object[][] { { 3, 1, 2 }, { 4, 2, 2 } });
  }

  public ParamTest(int expected, int input1, int input2) {
    this.expected = expected;
    this.input1 = input1;
    this.input2 = input2;
  }

  @Test
  public void ttest(){
    assertEquals(expected, new Calculate().add(input1, input2));
  }
}

Junit参数化设置:如果要为逻辑相同,但只是参数不同的方法创建多个,或者多次修改某方法的参数,就会显得特别繁杂,Junit提供Parameterized.class运行器来提供参数化设置(使用该运行器的测试类,所有测试方法都会执行预先提供的参数的数量的次数,无论是否使用了该参数)

使用方法:
1.用@RunWith改变测试运行器为Parameterized.class
2.创建一组数据成员(不限数量),这些数据成员就是需要被多次使用的参数(当然也可以有不需要被参数初始化的成员,只需要确保这些数据成员不是被构造器的参数初始化即可)
3.创建一个public static的返回值为Collection的方法,并使用@Parameters修饰,返回的容器内部需要存有数据,这些数据就是每次被使用的参数的值(在构造器中赋值给数据成员,如果每组有多个数据,则容器中存有的元素就是Object数组)
4.创建一个public的构造器,其有一个或多个参数,参数数量和类型视需要被参数初始化的数据成员而定,这些参数用来为数据成员赋值,其每次的值都是由Collection容器的元素指定(非参数初始化的数据成员可以不受影响,只要不使用参数即可)
5.创建自定义的测试方法,该方法会多次执行,直到Collection中的所有数据都执行完毕(不论是否使用了数据,都会多次执行)

spring与hibernate的整合测试

测试Spring是否成功加入项目中
1. 添加spring,hibernate,MySQL等jar包
2. 添加spring配置文件,hibernate配置文件
3. @BeforeClass获得spring的配置文件ClassPathXmlApplicationContext(“配置文件”)
4. 测试通过getBean获得spring管理的bean是否成功(Hibernate、Spring+Hibernate同理测试可得)

直接可以用注解配置测试器,加载applicationContext.xml
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(“classpath:applicationContext.xml”

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <bean id="date" class="java.util.Date"></bean>
    <bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
    </bean>
</beans>

下面代码在测试类的写出

public class SpringTest{
    private static ApplicationContext context;    
    public static  void setUpBeforeClass() throws Exception{
       context=new ClassPathXmlApplicationContext("applicationContext.xml");
}  
   @Test
   public void test(){
    Date date=(Date)context.getBean("date");
    System.out.println(date);
    }
}

Spring和Hibernate的表达方式

new ClassPathXmlApplicationContext("applicationContext.xml");
context.getBean("date");
HibernateSessionFactory.getSession();
(SessionFactoryImple)context.getBean("sessionFactory")

参考视频:http://www.imooc.com/learn/356
参考博客:http://www.cnblogs.com/ysocean/p/6889906.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值