普通使用:

在没有用测试框架之前,我们要用一个main方法来跑代码,而有了像junit这样的测试框架后,就可以不用次次写个main方法了。

直接上代码,注释里有说明:

package com.stuPayment;

import static org.junit.Assert.assertEquals;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test; /**
* 简单地演示了junit的基本用法
* @author 85060
*
*/
public class MyTest {
private static NumberTest numberTest = null; public void get3(NumberTest num) {
num.a = num.a*num.a*num.a;
} public void get2(NumberTest num) {
num.a = num.a*num.a;
} @Ignore //这个注释下的方法是会被忽略暂时不会运行的
public void ignoreMethod() {
System.out.println("i am ingnored");
} @Before //这个注释是在每个测试方法之前都会跑的,也就是每个@Test的方法跑之前
public void sayBefore() {
System.out.println("hello i am the before");
} @After //这个注释是在每个测试方法之后都会跑的,也就是每个@Test的方法跑之后
public void sayAfter() {
System.out.println("hello i am the after");
} @BeforeClass //这个注释是在整个测试开始前会跑的
public static void befC() {
System.out.println("hello i am the before class");
numberTest = new NumberTest(3);
} @AfterClass //这个注释是在整个测试结束后会跑的
public static void aftC() {
System.out.println("hello i am the after class and the a is "+numberTest.a+" now"); } @Test
public void test1() {
System.out.println("i am the test1");
get2(numberTest);
assertEquals(9, numberTest.a);
} @Test
public void test2() {
System.out.println("i am the test2");
/*if(numberTest.a == 3) { } else if(numberTest.a == 9)*/
get3(numberTest);
assertEquals(729, numberTest.a); } } class NumberTest {
int a; public NumberTest(int a) {
this.a = a;
} }

运行的方法就直接run as Junit Test,运行结果:

在Springboot中使用junit:

这里只是提供一个简单的测试例子,可以用来单独测试service或者是你的dao接口。

关于@Runwiht:

@RunWith
在JUnit中有很多个Runner,他们负责调用你的测试代码,每一个Runner都有各自的特殊功能,你要根据需要选择不同的Runner来运行你的测试代码。
如果我们只是简单的做普通Java测试,不涉及Spring Web项目,你可以省略@RunWith注解,这样系统会自动使用默认Runner来运行你的代码。

也是直接上代码,注释里面有说明:

package com.stuPayment;

import static org.junit.Assert.assertArrayEquals;

import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import com.stuPayment.dao.LoginMapper;
import com.stuPayment.entiy.User; /**
* 演示了springboot环境下的junit测试
* @author 85060
*
*/
@RunWith(SpringRunner.class) // SpringJUnit支持,由此引入Spring-Test框架支持!
@SpringBootTest //提供spring环境
public class MyTest2 { @Autowired
private LoginMapper loginMapper; @Test
public void testVoid() {
Map<String, Object> user = new HashMap<>();
user.put("userAccount", "123");
user.put("userPassword", "123");
List<User> userList = loginMapper.getThisUser(user); assertArrayEquals(
new Object[]{
userList.isEmpty()
}, new Object[]{
false
}
);
}
}

junit的参数化测试:

其实就是,当有一个方法,要用多组参数来验证其正确性,这个时候你就可以考虑用这个@RunWith(Parameterized.class)注解

上代码,代码里面有注解解释:

package com.stuPayment;

import static org.junit.Assert.assertTrue;

import java.util.Arrays;
import java.util.Collection; import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters; /**
* 演示一下参数测试
* @author 85060
*
*/
@RunWith(Parameterized.class) //一定要用这个注解
public class MyTest3 {
private String name;
private boolean result; /**
* 在参数测试中只能有一个构造方法,因为参数测试是需要一个构造方法参与的
* 这个构造方法的参数和等一下@Parameters注解的方法中的Object数组中值的顺序对应
* @param name
* @param result
*/
public MyTest3(String name, boolean result) {
this.name = name;
this.result = result;
} /**
* 必须提供@Parameters方法,方法签名必须是public static Collection,不能有参数,
* 并且collection元素必须是相同长度的数组。
* 同事数组的长度必须与唯一的公共构造函数的参数数量相匹配。
*/
@Parameters
public static Collection<?> data() {
return Arrays.asList(new Object[][]{
{"jflksadjflkasdlkfj",false},
{"mikjsdkalfjlksdjfmifjaslkdjf",true},
{"mimimimisdfsadfsd",true}
});//意思其实就是拿这些数据去用MyTest3(String name, boolean result)一直new
} @Test //真正测试也就是跑的那个方法,用@parameters方法返回的那些参数每组都用MyTest3(String name, bolean result)
//然后再跑下面这个方法。
public void test() {
assertTrue(name.contains("mi") == result);//看看每个用上面那些数据new的实例是否符合要求
} }

测试结果的效果:

可以看到,如果有错的话会有蓝色的叉叉,然后点击这个错误,在failure trace那可以看到简单的错误说明。

最新文章

  1. [LeetCode] Non-overlapping Intervals 非重叠区间
  2. Python 学习随笔1
  3. Python成长笔记 - 基础篇 (十一)
  4. Codeforces Round #375 (Div. 2) - A
  5. LeetCode Sum Root to Leaf Numbers(DFS)
  6. OC IOS屏幕分辨率
  7. 所有外包项目威客网站列表----来自程序员接私活网qxj.me
  8. centos6.5 安装python2.7.5
  9. Oracle_Q&amp;A_02
  10. 【原生js】js动态添加dom,如何绑定事件
  11. kubernetes 核心技术概念(二)之 volume namespace annoation
  12. [20180926]共享池中的NETWORK BUFFER.txt
  13. 前端学习-jQuery
  14. JAVA:IDEA使用Hibernate(2)
  15. RabbmitMQ-组成及简单使用
  16. nodejs中的框架介绍
  17. Linux(CentOS 6.5) 下安装MySql 5.7.18 二进制版本粗浅攻略
  18. IIS 绑定 HTTPS 域名
  19. 03 Editor plugins and IDEs 编辑器插件和 ide
  20. PHP - AJAX 与 MySQL

热门文章

  1. (转)Java经典设计模式(3):十一种行为型模式(附实例和详解)
  2. [转]text和content方法的区别
  3. 页面渲染——简化paint复杂程度和区域
  4. 转,如果linux不能用yum安装asterisk时,可以库参照以下办法添加asterisk仓库
  5. PowerDesigner 把Comment写到name中 和把name写到Comment中
  6. 2.对《30个提高Web程序执行效率的好经验》的理解
  7. socket学习目录
  8. 【221】◀▶ IDL GUI 函数说明
  9. CF-831C
  10. Flutter实战视频-移动电商-49.详细页_Stack制作底部工具栏