什么是单元测试:

写了个类,要给别人用,不知道会不会有bug,所以我们要测试一下。最土的方法是main方法,用main方法不好,加入我们定了很多函数,都在main方法里测试吗?1.不能一起运行。如果有多个类,每个类都写一个main方法吗?做一遍测试麻烦。2.大多数情况下需要人为去确定是否正确。

为什么单元测试:降低后期成本。提高软件质量。

Junit

创建junit:包右键Junit Test Case.

对T类进行测试:

Junit

测试代码:

Junit

Junit

对T的add方法测试:

Junit

import static org.junit.Assert.*;Assert是个类不是包。静态引入可以把里面的方法引入进来。就不用Assert.调用了。fail就是Assert类里的一个方法。

Junit

单元测试运行在测试类上右键或者在方法上右键。

Junit

运行结果:Junit通过。

Junit好处:如果有两个方法的话,同时运行的话main是做不到的。不用人工了,程序就帮你判断了。

静态引入:静态引入一个类,直接使用这个类中的静态方法,就不需要类名了。

测试框架除了junit之外还有TestNG。

 

 

断言除了Assert还有AssertThat。

Assert:

Junit

绿条。

Junit

Junit

只要断言没通过,字符就要显示在这里。

AssertThat:替代了其他所有的assert.core和liberary.

切记导入的是Matchers,而不是Matcher import static org.hamcrest.Matchers.*;

assertThat(0, is(1));

assertThat(0, is(not(1)));

Junit

junit中出现如下错误:

Junit

Junit

我们在这儿用了两种包,一种junit4还有hamcrest包。我用的junit4的包是MyEclipse自带的,与hamcrest的包不一致。要重新下载junit4的包。我换的是junit 4.9.ok,运行成功。

Junit

新的断言只是比老的断言看起来更自然。

Failure测试失败Error程序有问题。只有在Error没有出错的情况下谈Failure。

Annotation:

Junit

Junit

@Test表明该方法是一个测试方法。

如果测试的时候测试整个类,就把类中所有测试方法都测试了。

Junit

运行通过,因为我们期待他抛异常。

Junit

timeout测试方法在多长时间内能完成。

@Ignore忽略这个方法。

@before 在每个测试方法之前运行

@After在每个测试方法之后运行

Junit

Junit

@BeforeClass:任何测试运行之前,甚至在这个类初始化之前,先运行BeforeClass

@AfterClass:这个类所以的方法都运行完之后再运行AfterClass。

初始化之前运行所以这两个类一定是static。

比如  要提前做的一些事,连接数据库写在@BeforeClass中,把关闭连接写在@AfterClass中。当我们在测试之前需要取得很耗费时间的资源,或者搭载一些比较耗时间的环境。资源释放环境卸载用@AfterClass。

Junit

Junit

运行多个测试:

运行在不同包下不同类下的所有测试。

右键项目名-->run as-->run configurations-->

Junit

好处很大。

注意:

类放在test包中。类名用XXXTest结尾。方法用testMethod命名。

 

 

Junit4有个小bug,

Junit

@BeforeClass里边,SessionFactory构建的时候不报出异常,静悄悄给吞掉了。

 

Junit:调试出来没有错误,但是程序就是有问题有两种解决办法。

在Junit中:

 方法一:

public static void main(){

beforeClass();

}

 方法二:

try {

sf=new org.hibernate.cfg.Configuration().configure().buildSessionFactory();

} catch (HibernateException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

 

 

 

相关文章: