JUnit是什么
JUnit是一个Java语言单元测试框架
JUnit单元测试的好处
- 可以书写一些列的测试方法,对项目的所有的接口或者方法进行单元测试
- 启动单元测试后,是自动化的测试
- 我们只需要查看最后的结果
- 每个单元测试的用例都是相对独立的,由JUnit启动
- 添加、删除、屏蔽测试方法
jar包
如果要引入第三方的插件,xxx.jar
的文件,首先要把这个文件导入到我们的工程目录下,其次,要添加到工程依赖的目录中
基础运用
import org.junit.Test;
public class Ch01 {
// test 注解是JUnit提供的一个单元测试注解
// 如果你的工程没有导入JUnit的jar包,Test注解是不认识的
@Test
public void test01() {
System.out.println("Hello ");
}
@Test
public void test02() {
System.out.println("Hello 2");
}
}
关于测试方法
- 不能有返回值(方法要为
void
) - 不能有参数
- 必须有
Test
注解
JUnit断言
JUnit所有的断言都包含在Assert类中
这个类提供了很多有用的断言来编写测试用例
只有失败的才会被记录
一些方法
assertEquals
:检查两个变量或等式是否平衡assertTrue
:检查条件是否为真assertFalse
:检查条件是否为假assertNotNull
:检查对象是否不为空assertNull
:检查对象是否为空
断言不成功将会抛出异常,即使程序正常运行,但是结果不正确,也会以失败结束。
JUnit注解
- Test
- Before:在测试方法执行之前,执行的方法
- After
命名规范:
单元测试类的命名:被测试类的类名 + Test
测试方法的命名:test + 被测试方法的方法名
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class Ch03 {
@Test
public void test01() {
System.out.println("Test01");
}
@Test
public void test02() {
System.out.println("Test02");
}
@Before
public void testBefore() {
System.out.println("before");
}
@After
public void testAfter() {
System.out.println("after");
}
}
输出结果:
before Test01 after before Test02 after
一些简单的测试
代码部分
public class Ch04 {
/**
* 尝试开辟50个线程
* 每个线程向集合中put 100,000 个元素
* 测试两个类所需的时间
*/
@Test
public void hashtableTest() throws InterruptedException {
final Map<Integer, Integer> map = new Hashtable<>(500000);
// 计数器
final CountDownLatch countDownLatch = new CountDownLatch(50);
long start = System.currentTimeMillis();
System.out.println("开始测试hashtable=-=-=-=-=-=-=-=-=-=");
for (int i = 0; i < 50; i++) {
final int j=i;
new Thread(() -> {
for (int k = 0; k < 100000; k++) {
map.put(j*k,1);
}
// 记录添加数据的次数
// countDownLatch.countDown();
}).start();
}
// countDownLatch.await();
long end = System.currentTimeMillis();
System.out.println("hashtable执行了:" + (end-start));
}
@Test
public void testConcurrentHashMap() throws InterruptedException {
final Map<Integer, Integer> map = new ConcurrentHashMap<>(500000);
// 计数器
final CountDownLatch countDownLatch = new CountDownLatch(50);
long start = System.currentTimeMillis();
System.out.println("开始测试ConcurrentHashMap=-=-=-=-=-=-=-=-=-=");
for (int i = 0; i < 50; i++) {
final int j=i;
new Thread(() -> {
for (int k = 0; k < 100000; k++) {
map.put(j*k,1);
}
// 记录添加数据的次数
// countDownLatch.countDown();
}).start();
}
// countDownLatch.await();
long end = System.currentTimeMillis();
System.out.println("hashtable执行了:" + (end-start));
}
@Test
public void testArrayList() {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10000000; i++) {
list.add((int) (Math.random() * 100));
}
long start = System.currentTimeMillis();
// for (int i = 0; i < list.size(); i++) {
// list.get(i);
// }
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
iterator.next();
}
long end = System.currentTimeMillis();
System.out.println("arraylist用时:"+(end-start));
}
@Test
public void testLinkedList() {
List<Integer> list = new LinkedList<>();
for (int i = 0; i < 10000000; i++) {
list.add((int) (Math.random() * 100));
}
long start = System.currentTimeMillis();
// for (int i = 0; i < list.size(); i++) {
// list.get(i);
// }
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
iterator.next();
}
long end = System.currentTimeMillis();
System.out.println("linkedlist用时:"+(end-start));
}
@Before
public void before() {
}
}
ArrayList和LinkedList性能测试
- 尾插 数组快,链表慢
- 遍历 数组快,链表慢
- 头插 数组慢,链表快
- 随机删除,如果要过滤,建议用链表(LinkedList)
不要只因一次挫败,就放弃你原来决心想达到的目的。 ——莎士比亚《哈姆雷特》
1 条评论
每日一看(☆ω☆)