Re: [問題] JUnit 如何連續輸入?

看板java作者 (漫步)時間11年前 (2012/12/28 17:01), 編輯推噓3(302)
留言5則, 4人參與, 最新討論串2/2 (看更多)
讓我們對討論的問題有一個基本的共識, 首先來說一下 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
頒布好人徽章一枚 XD
12/28 17:02, 1F

12/28 17:07, , 2F
哈 板大, 我這不會有幫人寫作業的嫌疑吧. 別浸我水桶阿
12/28 17:07, 2F

12/28 17:28, , 3F
謝謝大大,JMock我是真的沒用過,我再去研究看看,乾蝦
12/28 17:28, 3F

12/28 17:30, , 4F
這個絕對不是幫人寫作業,因為這只是作業的0.1%吧 ="=
12/28 17:30, 4F

12/28 18:50, , 5F
12/28 18:50, 5F
文章代碼(AID): #1GtL_NEc (java)
文章代碼(AID): #1GtL_NEc (java)