java中使用junit测试

最初写代码只要功能走通就不管了,然后如果出了什么问题再去修改,这是因为没做测试的工作。测试其实很简单。

1.准备

当前使用idea编写代码,用maven构建工程,使用maven的test功能来进行批量测试。测试工具为junit。

2.编写功能代码

将主要的业务功能的代码完成。

 1 public interface Sender {
 2     public void send();
 3 }
 4 public class MailSender implements Sender {
 5     @Override
 6     public void send() {
 7         System.out.println("This is emailSender!");
 8     }
 9 }
10 public class SmsSender implements Sender {
11     @Override
12     public void send() {
13         System.out.println("This is SmsSender!!");
14     }
15 }
16 public class SendFactory {
17 
18     public Sender produce(String type){
19         if("email".equals(type)){
20             return new MailSender();
21         }
22         if ("sms".equals(type)){
23             return new SmsSender();
24         }
25         System.out.println("输入类型不正确!");
26         return null;
27     }
28 }

3.编写测试用例

在需要测试的类里,按快捷键:ctrl+shif+t,创建一个test用例,可以选择要测试的方法。

4.使用注解

测试的功能模块一般都会有准备环境和结束行为。在junit里,使用注解@Before,@After编写前后的代码,@Test里面就是测试内容。

 1 package com.test.java.designPattern.factory;
 2 
 3 import junit.framework.TestResult;
 4 import junit.framework.TestSuite;
 5 import org.junit.After;
 6 import org.junit.Before;
 7 import org.junit.Test;
 8 
 9 import static org.junit.Assert.*;
10 
11 /**
12  * Created by mrf on 2016/2/25.
13  */
14 public class SendFactoryTest {
15 
16     protected long startTime;
17     protected long endTime;
18 
19     @Before
20     public void setUp() throws Exception {
21         this.startTime= System.currentTimeMillis();
22         System.out.println("=========开始测试===========");
23     }
24 
25     @After
26     public void tearDown() throws Exception {
27         this.endTime = System.currentTimeMillis();
28         System.out.println("测试用时:"+(endTime-startTime));
29         System.out.println("=========测试结束===========");
30     }
31 
32     @Test
33     public void testProduce() throws Exception {
34         SendFactory sendFactory = new SendFactory();
35         Sender sender = sendFactory.produce("email");
36         sender.send();
37     }
38 
39     @Test
40     public void testM(){
41         System.out.println(12);
42     }
43     
44 }

5.注意

maven测试一般文件位于test/java下对应的包下的的测试类,类名为要测试的类名+Test,要测试的方法为test+要测试的方法名。如上。

6.运行maven的test或install自动执行测试

 可以直接在方法名上右键运行,也可以在maven中test或install。

如果光标位于方法体内,右键会出现运行这个测试方法,将光标移出方法,右键直接运行test用例,会运行所有@Test注解下的方法。

maven的test或install则直接测试所有的方法。

1 =========开始测试===========
2 Disconnected from the target VM, address: '127.0.0.1:6678', transport: 'socket'
3 This is emailSender!
4 测试用时:2
5 =========测试结束===========
6 =========开始测试===========
7 12
8 测试用时:0
9 =========测试结束===========

7.Assert

Junit4提供了一个Assert类(虽然package不同,但是大致差不多)。Assert类中定义了很多静态方法来进行断言。列表如下:

  • assertTrue(String message, boolean condition) 要求condition == true
  • assertFalse(String message, boolean condition) 要求condition == false
  • fail(String message) 必然失败,同样要求代码不可达
  • assertEquals(String message, XXX expected,XXX actual) 要求expected.equals(actual)
  • assertArrayEquals(String message, XXX[] expecteds,XXX [] actuals) 要求expected.equalsArray(actual)
  • assertNotNull(String message, Object object) 要求object!=null
  • assertNull(String message, Object object) 要求object==null
  • assertSame(String message, Object expected, Object actual) 要求expected == actual
  • assertNotSame(String message, Object unexpected,Object actual) 要求expected != actual
  • assertThat(String reason, T actual, Matcher matcher) 要求matcher.matches(actual) == true

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

Safari信息泄露漏洞分析

Javascript中的数组和数组对象一直都是编程人员优化的主要目标,一般来说,数组只会包含一些基本类型数据,比如说32位整数或字符等等。因此,每个引擎都会对这...

792
来自专栏张首富-小白的成长历程

redis管理

Redis发布消息通常有两种模式: • 队列模式(queuing) • 发布-订阅模式(publish-subscribe) 任务队列:顾名思义,就是“...

1803
来自专栏Ryan Miao

java中byte, iso-8859-1, UTF-8,乱码的根源

Post@https://ryan-miao.github.io 测试代码https://github.com/Ryan-Miao/someTest/comm...

4866
来自专栏java初学

spring框架(1)— 依赖注入

45812
来自专栏转载gongluck的CSDN博客

google protobuf学习笔记:编译安装、序列化、反序列化

简介 protobuf也叫protocol buffer是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实...

1.2K5
来自专栏java一日一条

Java 并发开发:内置锁 Synchronized

在多线程编程中,线程安全问题是一个最为关键的问题,其核心概念就在于正确性,即当多个线程访问某一共享、可变数据时,始终都不会导致数据破坏以及其他不该出现的结果。而...

552
来自专栏微信公众号:Java团长

Java基础知识详细总结

ClassLoader使用的是双亲委托模型来搜索类的,每个ClassLoader实例都有一个父类加载器的引用(不是继承的关系,是一个包含的关系),虚拟机内置的类...

1133
来自专栏coolblog.xyz技术专栏

MyBatis 源码分析 - 配置文件解析过程

由于本篇文章篇幅比较大,所以这里拿出一节对本文进行快速概括。本篇文章对 MyBatis 配置文件中常用配置的解析过程进行了较为详细的介绍和分析,包括但不限于se...

792
来自专栏IMWeb前端团队

递归函数的优化

本文作者:IMWeb 寒纱阁主 原文出处:IMWeb社区 未经同意,禁止转载 递归函数是一个函数自我调用而构成的,如下是一个典型的递归阶乘函数: fu...

18910
来自专栏java一日一条

50个常见的 Java 错误及避免方法(第二部分)

System.out.println("Whatdo you want to do?");

1073

扫码关注云+社区