Junit的使用
参考demo:G:\学习资料\java\java学习文档\java技术文档\Spring文档\xufei-spring-word\xufei-projo-test => junit、suite、stub
# 基础使用
public class TestCalculator {
private static Calculator calculator;
// 初始化这个实例
// @Before 这个注解的作用就是在测试用例执行之前进行对象实例化的
// 由 @before修饰的方法 一般情况下用来进行测试的对象以及数据的初始化
@BeforeClass
public static void init() {
System.out.println("我是初始化....");
calculator = new Calculator();
}
//@After
@AfterClass // 这个注解的作用就是在测试用例执行后执行
public static void destroy() {
calculator = null;
}
/**
* 测试加法
*/
@Test
public void testAdd() {
int addResult = calculator.add(1, 1);
// 执行了结果之后 :判断这个结果和预期结果是否一致
// 断言 判断结果正确与否
assertEquals(2, addResult);
}
/**
* 测试这个处罚是否正确
* expected:希望返回某一类的异常
* timeout:测试用例执行的超时时间
*/
@Test(expected = ArithmeticException.class,timeout = 5000)
public void testCf() {
int cfResult = calculator.cf(10, 1);
assertNotNull(cfResult); // 判断这个对象是否不为空
assertEquals(5,cfResult);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# hamcrest 使用
需求:执行了这个testCf方法执行 我需要进行多个判断
这多个判断 只需要一个满足条件就成立了.....
这个 hamcrest 简单的说就是对原来的Junit的功能的增强
比如:同时成立
一个成立就成立呀
判断null呀 等等 都有封装
/**
* 测试这个处罚是否正确
* expected:希望返回某一类的异常
* timeout:测试用例执行的超时时间
*/
@Test(/*expected = ArithmeticException.class,timeout = 5000*/)
public void testCf() {
int cfResult = calculator.cf(10, 1);
// 下面的两个判断 只要其中一个成立了 那么 这个断言就成立了
// 我在断言的时候 不能单独写成一个一个断言 我需要 写到一起怎么办呢?
/*assertNotNull(cfResult); // 判断这个对象是否不为空
assertEquals(5,cfResult);*/
assertThat(cfResult, AnyOf.anyOf(IsNull.notNullValue(), IsEqual.equalTo(5)));
/**
* AnyOf.anyOf:一个成立那么就成立
*
* AllOf.allOf():所有成立才成立
*
* IsNull.notNullValue():不能是null值
*
* IsNull.nullValue():必须是null值
*
* IsInstanceOf.instanceOf():必须是某一个类的实例
*
* IsAnything:这个表示的是对象其中一个
*
* IsNot:不能是某一个数据 或者某一个对象
*/
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# suite 使用
场景:我要一起运行多个测试用例
当我们开发好一个功能之后 需要手动的去启动一个一个测试用例 那么 就太浪费时间了 那么怎么办呢?
在这种场景下 suite 就应运而生了
# 准备测试用例1
public class TestCaltuteA {
private Calculator calculator = null;
@Before
public void init() {
calculator = new Calculator();
}
@Test
public void testAdd() {
int addResult = calculator.add(1, 1);
Assert.assertEquals(2, addResult);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 准备测试用例2
public class TestCaltuteB {
private Calculator calculator =null;
@Before
public void init(){
calculator =new Calculator();
}
@Test
public void testCf(){
int addResult = calculator.cf(10, 2);
Assert.assertEquals(5,addResult);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 准备启动测试类
@RunWith(Suite.class)
// 这里写执行哪些测试类
@Suite.SuiteClasses({TestCaltuteA.class,TestCaltuteB.class})
public class TestCalculatorAB {
}
1
2
3
4
5
2
3
4
5
# stub 使用
stub:装逼的装
有这样一种场景:我们分层做开发 A做的是业务逻辑层 B做的是DAO层 那么这个时候 当B刚写玩约束规范(DAO接口) 就请假了 结果A把业务逻辑层写完了 要写测试用例了 咋办呢? 那么这个时候A就想到了一种解决这个问题的方式:stub 这种思想
适用场景:DAO有规范但是没有实现的情况下 Service要做测试
# 准备DAO接口
public interface IUserDAO {
/**
* 通过id找到用户
*
* @param id
* @return
*/
User findUserById(int id);
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 准备业务逻辑层
public class UserService {
private IUserDAO userDAO;
public void setUserDAO(IUserDAO userDAO) {
this.userDAO = userDAO;
}
/**
* 测试的方法
*
* @return
*/
public User findUserById(int id) {
// 中间经历了无数个步骤
//....
//....
return userDAO.findUserById(id);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 准备测试类
public class TestUserService {
private UserService userService;
private User exUser;
@Before
public void init() {
userService = new UserService();
userService.setUserDAO(new UserDAOStub());
exUser = new User(1, "xff:1", "密码:1");
}
/**
* 测试通过id找用户的这个方法
*/
@Test
public void testFindUserById() {
User useResult = userService.findUserById(1);
// 接下来进行断言
Assert.assertEquals(exUser.getUId(), useResult.getUId());
Assert.assertEquals(exUser.getUName(), useResult.getUName());
Assert.assertEquals(exUser.getPassWord(), useResult.getPassWord());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 准备stub的DAO实现
public class UserDAOStub implements IUserDAO {
private final Map<Integer, User> userMap = new HashMap<>();
public UserDAOStub() {
for (int i = 1; i < 10; i++) {
userMap.put(i, new User(i, "xff:" + i, "密码:" + i));
}
}
@Override
public User findUserById(int id) {
return userMap.get(id);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
最近更新: 2025/01/22, 13:46:16