JUnit学习笔记-3
1.学习了JUnit4.x中的@Test,@BeforeClass,@AfterClass,@Before,@After,@Ignore标签的意义,并且使用它们。并且学习了带expteced和timeout参数的@Test标签。
2.学习了JUnit中Failure和Error的区别。及其它们是怎样出现的。
3.温故了Java中Excepion和Error的知识,只有Excpetion和Error两个类实现了Throwable接口。发现Error能手动抛出和捕捉,虽然这样写是无任何意义的。
例:
public class TestError{
public void throwError(){
throw new Error("抛出的错误");
}
public static void main(String[] args){
TestError te = new TestError();
try{
te.throwError();
}catch(Error e){
System.out.println("catch到了一个错误");
e.printStackTrace();
}
}
}4.下面是学习期间写的代码笔记:
MathDemo类:提供加和除的方法
package com.yuchujin.junit;
public class MathDemo {
public int add(int a,int b){
return a+b;
}
public int div(int a,int b){
if(0 == b){
throw new ArithmeticException("除数不能为0");
}
return a/b;
}
public Object getObject() {
Object[] os = new Object[2];
//1
// return null;
//2
return os[3];
}
public void throwError(){
throw new Error("抛出的错误");
}
}MathDemoTest类:MathDemo的测试类
package com.yuchujin.junit;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
/**
* MathDemo测试类
* @author Ayuchujin
*
*/
public class MathDemoTest {
MathDemo demo = null;
//@BeforeClass注释:在类加载时初始化
@BeforeClass
public static void setUpBeforeClass(){
System.out.println("setUpBeforeClass");
}
//@AfterClass注释:在类"销毁"时执行
@AfterClass
public static void treaDownAfterClass(){
System.out.println("treaDownAfterClass");
}
//@Before注释:在对象生成时初始化
@Before
public void setUp(){
System.out.println("setUp");
demo = new MathDemo();
}
//@After注释:代表在对象"销毁"时执行
@After
public void tearDown(){
System.out.println("tearDown");
demo = null;
}
//@Test注释:代表要测试的测试方法
@Test
public void testAdd() {
int expected = 2;
int actual = demo.add(1, 1);
assertEquals(expected, actual);
}
@Test
public void testDiv() {
int expected = 2;
int actual = demo.div(2, 1);
//String作为第一个参数:在出错后显示第一个String消息信息
assertEquals("除出错了",expected, actual);//没有继承任何类仍然可以使用类方法。原因是因为使用了JAVA5的新特性,静态导入。
}
//expected带异常参数:如果方法体内抛出跟expected同样的异常则测试通过,否则测试不通过。
@Test(expected = ArithmeticException.class)
public void testDiv2(){
int expected = 2;
int actual = demo.div(1, 0);
assertEquals(expected, actual);
//JUnit4.x中提出了异常参数,在3.8中只能用try-catch来实现。这样使用JAVA注释的方式比3.8中跟简便
//下面是3.8版本如何测试抛出异常
// int expected = 2;
// try{
// int actual = demo.div(1, 0);
// assertEquals(expected, actual);
// }catch(Exception e){
// Assert.assertNotNull(e);
// }
}
//timeout带超时时间参数:如果执行方法花费时超过timeout则执行不通过,否则通过。
@Test(timeout=5)
public void testAdd2(){
try {
Thread.sleep(10);//线程在sleep到第5毫秒时被中断,JUnit测试不通过。
} catch (InterruptedException e) {
e.printStackTrace();
}
int expected = 2;
int actual = demo.add(1, 1);
assertEquals(expected, actual);
}
//两个参数可以连用
@Test(expected=ArithmeticException.class,timeout=100)
public void testDiv3(){
int expected = 2;
int actual = demo.div(1, 0);
assertEquals(expected, actual);
}
//@Ignore注释:代表先定义一个测试方法,但未写测试内容,留给以后写。这样使用了@Ignore以后将不会被执行
//在TDD中,是先写测试方法再在写业务类中具体的方法。这样Ignore标签就相当有用
@Test
@Ignore
public void testNoNameMethod(){
System.out.println("该测试方法不执行");
// TODO 未完成测试方法
}
//JUnit中Error和Failure的区别
@Test
public void testGetObject(){
//执行demo.getObject()中的1则会出现Failure
//执行demo.getObject()中的2则会出现Error
Object o = demo.getObject();
//Failure代表:在执行断言时得到的实际结果和预期的不一样。
//Error代表:在执行断言前出现了预想不到的情况。Error执行不到断言部分。下面一句执行不了,107行就直接抛出了下标越界异常。
assertNotNull(o);
}
} 相关推荐
shirleypaddy 2020-10-19
qingmumu 2020-10-19
lustdevil 2020-10-18
ganlulululu 2020-10-12
lustdevil 2020-08-03
lustdevil 2020-07-18
lustdevil 2020-06-25
lustdevil 2020-06-21
zhengzf0 2020-06-21
宿命java 2020-06-15
JackYin 2020-06-14
dongxurr 2020-06-07
snowphy 2020-06-06
zhengzf0 2020-05-28
81901836 2020-05-26
Julywhj 2020-05-26