Re: [問題] JUnit 如何連續輸入?
讓我們對討論的問題有一個基本的共識,
首先來說一下 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
推
12/28 17:02, , 1F
12/28 17:02, 1F
→
12/28 17:07, , 2F
12/28 17:07, 2F
推
12/28 17:28, , 3F
12/28 17:28, 3F
→
12/28 17:30, , 4F
12/28 17:30, 4F
推
12/28 18:50, , 5F
12/28 18:50, 5F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):