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