Java课程学习笔记 — JUnit accuracy/failure/stress test区别

  accuracy test(结果准确性测试)

  例如,Assert.assertEquals(expected, actual)。

  如果结果不符合期望则产生failure。说明程序逻辑有问题。

  failure test(抛出异常测试)

  expected属性用来指示期望抛出的异常类型。例如,@Test(expected = IllegalArgumentException.class)。

  如果结果不符合期望则产生failure。说明程序逻辑有问题。

  stress test(运行时间测试)

  timeout属性用来指示时间上限,单位是毫秒。例如,@Test(timeout = 300)。

  如果超时则产生error。说明程序本身性能达不到要求。

  

  举个例子

  

 1 package edu.zju.cst.Student;
 2
 3 public class Student {
 4     private String name;
 5
 6     public String getName() {
 7         return name;
 8     }
 9
10     public void setName(String name) {
11         this.name = name;
12     }
13
14     public String speak(String stm) {
15         try {
16             Thread.sleep(400);
17         } catch (InterruptedException e) {
18             e.printStackTrace();
19         }
20
21         return name + ": " + stm;
22     }
23 }

Student.java

 1 package edu.zju.cst;
 2
 3 import org.junit.After;
 4 import org.junit.Before;
 5 import org.junit.Test;
 6
 7 import edu.zju.cst.Student.Student;
 8 import junit.framework.Assert;
 9
10 public class StudentAccuracyTest {
11     private Student student;
12
13     @Before
14     public void setUp() {
15         student = new Student();
16         student.setName("Tom");
17     }
18
19     @Test
20     public void testSpeak() {
21         String expected = "Tom: hello";
22         String actual = student.speak("hell");
23         Assert.assertEquals(expected, actual);
24     }
25
26     @After
27     public void tearDown() {
28
29     }
30 }

StudentAccuracyTest.java

 1 package edu.zju.cst;
 2
 3 import org.junit.After;
 4 import org.junit.Before;
 5 import org.junit.Test;
 6
 7 import edu.zju.cst.Student.Student;
 8
 9 public class StudentFailureTest {
10     private Student student;
11
12     @Before
13     public void setUp() {
14         student = new Student();
15         student.setName("Tom");
16     }
17
18     @Test(expected = IllegalArgumentException.class)
19     public void testSpeak() throws IllegalArgumentException {
20         student.speak("hell");
21     }
22
23     @After
24     public void tearDown() {
25
26     }
27 }

StudentFailureTest.java

 1 package edu.zju.cst;
 2
 3 import org.junit.After;
 4 import org.junit.Before;
 5 import org.junit.Test;
 6
 7 import edu.zju.cst.Student.Student;
 8
 9 public class StudentStressTest {
10     private Student student;
11
12     @Before
13     public void setUp() {
14         student = new Student();
15         student.setName("Tom");
16     }
17
18     @Test(timeout = 300)
19     public void testSpeak() {
20         student.speak("hell");
21     }
22
23     @After
24     public void tearDown() {
25
26     }
27 }

StudentStressTest.java

 1 package edu.zju.cst;
 2
 3 import org.junit.runner.RunWith;
 4 import org.junit.runners.Suite;
 5 import org.junit.runners.Suite.SuiteClasses;
 6
 7 @RunWith(Suite.class)
 8 @SuiteClasses({StudentAccuracyTest.class, StudentFailureTest.class,
 9     StudentStressTest.class})
10 public class TestSuite {
11
12 }

TestSuite.java

  

  参考资料

  JUnit单元测试的几个规律总结

  JUnit4:Test注解的两个属性:expected和timeout

时间: 2024-11-04 22:51:19

Java课程学习笔记 — JUnit accuracy/failure/stress test区别的相关文章

Android(java)学习笔记205:网易新闻客户端应用编写逻辑过程

1.我们的项目需求是编写一个新闻RSS浏览器,RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用.RSS目前广泛用于网上新闻频道,blog和wiki,主要的版本有0.91, 1.0, 2.0.使用RSS订阅能更快地获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新.网络用户可以在客户端借助于支持RSS的聚合工具软件,在不打开网站内容页面的情况下阅读支持RSS输出的网站内容. 例如如下的网易RSS订阅: 2.由于我们这

Berkely DB Java Edition学习笔记

Berkely DB对于高并发.要求速度快的应用来说是个不错的选择,mysql就是用BDB实现的(mysql的后台) ,mysql快,BDB比mysql还要快N倍.BDB是一种嵌入式的.非关系数据库,它与其他的关系数据库RMDBS不同,它没有提供SQL,而是提供 了自己的访问接口.作为一种嵌入式的数据库,它是进程内模式的,也就是说它和应用程序在同一内存空间运行,所以速度要高很多,与嵌入式的数据库如 Derby.HSQLDB(都是RMDBS的)相比,它效率更高,使用方法也有很大的不同.现在BDB以

java nio学习笔记(一)

位置保留,待用 java nio学习笔记(一),布布扣,bubuko.com

JAVA基础学习笔记(2)

看了几天的视频了,都没时间来写下学习笔记,今天来写下第二次的学习笔记,前几天看的给忘记了,就写最新看到的吧 主要内容:1.类的变量与函数(方法) 2.对象的存储方式 3.新建一个对象及对象的赋值与调用 4.空对象 5.匿名对象 1.类的变量与函数(方法) class Dog      //类名 { String name;  //变量的声明 int age; String color; void bark()   //方法的定义(返回值为空,不带参数) { System.out.println(

java排序学习笔记

前面写了js的排序实现,总得玩玩java的哈. 同样,冒泡.选择.快速(这三个之前实现过也写过文章).堆排序,然后做比较. 主要遇到的难点: - -||想轻松点写个封装计时的逻辑,不想每调用一个排序就要写一个计时代码.想想,还是javascript写起来方便: java的话,我想到的方法是写一个抽象类:抽象出排序方法,实现一个排序计时方法(该方法调用了抽象排序,但在先后排序时加入计时代码[感觉像是aop操作]): 接着所有排序类都继承这个抽象类,并实现排序方法,调用的时候直接调用继承的排序计时方

《深入Java虚拟机学习笔记》- 第4章 网络移动性

Java虚拟机学习笔记(四)网络移动性 <深入Java虚拟机学习笔记>- 第4章 网络移动性,布布扣,bubuko.com

《深入Java虚拟机学习笔记》- 第7章 类型的生命周期

一.类型生命周期的开始 如图所示 初始化时机 所有Java虚拟机实现必须在每个类或接口首次主动使用时初始化: 以下几种情形符合主动使用的要求: 当创建某个类的新实例时(或者通过在字节码中执行new指令,或者通过不明确的创建.反射.克隆和反序列化): 当调用某个类的静态方法时(即在字节码中执行invokestatic指令): 当使用某个类或接口的静态字段,或者对该字段赋值时(用final修饰的静态字段除外,它被初始化为一个编译时常量表达式): 当调用Java API中的某些反射方法: 当初始化某个

《深入Java虚拟机学习笔记》- 第13章 逻辑运算

<深入Java虚拟机学习笔记>- 第13章 浮点运算 <深入Java虚拟机学习笔记>- 第13章 逻辑运算,布布扣,bubuko.com

《深入Java虚拟机学习笔记》- 第12章 整数运算

Java虚拟机提供几种进行整数算术运算的操作码,他们执行基于int和long类型的运算.当byte.short和char类型值参与算术运算时,首先会将它们转换为int类型.这些操作码都不会抛出异常,溢出在这里通常可以被忽略. 整数加法 操作码 操作数 说明 iadd (无) 从栈中弹出两个int类型数,相加,然后将所得int类型结果压回栈 ladd (无) 从栈中弹出两个long类型数,相加,然后将所得long类型结果压回栈 将一个常量与局部变量相加 操作码 操作数 说明 iinc vindex