作者byend (漫步)
看板java
标题Re: [问题] JUnit 如何连续输入?
时间Fri Dec 28 17:01:09 2012
让我们对讨论的问题有一个基本的共识,
首先来说一下 Unit Test 的作用,
单元测试, 顾名思义就是以一个函式为单位, 进行测试
目的在於确认函式中的程式码没有 bug, 逻辑正确
说起来简单, 但一个符合现实函式之中, 都会呼叫 其他函式
甚至, 其他类别的函式. 所以 Unit Test 就不好写了
这时候我们就需要 模拟的方式来模拟相关的外部物件或方法.
JMock, 就是你需要的东西, 用 JMock 可以 模拟出一个物件
并且设定函式的行为...
回到你的问题, 你需要一个 Mock Object for Scanner.
然後写 Unit Test 时, 要求这个 Mock Object 回传特定的值
-------- 清谈分隔线 ------
1. 首先在原本类别中加入这个函式:
protected Scanner getScanner() {
return scanner;
}
2. 把原本直接呼叫 scanner 的地方都换成 getScanner()
Ex: Line 56, scanner.getInt() 改成 getScanner().getInt()
3. 如果你不懂 JMock, 请拜 Google 大神
4. 在 Unit Test 中复写这个 getScanner();
并且回传 JMocked Object. 以下虚拟码 你参考:
public class TTTTester {
TTT unit;
Scanner mScanner;
public TTTTester() {
mScanner = JMock.mock(Scanner.class);
unit = new TTTTester() {
protected Scanner getScanner() {
return mScanner;
}
};
}
public void test_TTTStartNominal() {
// 设定要让 mScanner 作哪些动作
JMock.setExpectations() {
oneOf(mScanner).getInt():
willreturn(1);
oneOf(mScanner). getInt();
willreturn(3);
// 依序设定 , 8 , 9, 6
}
unit._TTTStart();
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 66.235.60.178
1F:推 PsMonkey:颁布好人徽章一枚 XD 12/28 17:02
2F:→ byend:哈 板大, 我这不会有帮人写作业的嫌疑吧. 别浸我水桶阿 12/28 17:07
3F:推 blackohnny:谢谢大大,JMock我是真的没用过,我再去研究看看,乾虾 12/28 17:28
4F:→ blackohnny:这个绝对不是帮人写作业,因为这只是作业的0.1%吧 ="= 12/28 17:30
5F:推 taylorabc: 12/28 18:50