2005年12月9日

我不是故意要寫出這種 Test Code 的!

這幾天在改權限機制的 Java 元件,同時為了測試執行結果是否一如預期都必須寫 JUnit 測試程式碼。

話說,為了檢測這個元件對使用者的異動是否正常,所以有了以下的測試程式碼:

public void testGetUser() {

// 先移掉所有使用者記錄 acl.removeUser( "Keroro" ); acl.removeUser( "Kururu" ); acl.removeUser( "Giroro" ); acl.removeUser( "Dororo" ); acl.removeUser( "Tamama" );

// 把所有使用者加進去吧! assertTrue( "無法新增使用者 Keroro!", acl.addUser( "Keroro", "軍曹", "Keroro 小隊" )); assertTrue( "無法新增使用者 Kururu!", acl.addUser( "Kururu", "曹長", "Keroro 小隊" )); assertTrue( "無法新增使用者 Giroro!", acl.addUser( "Giroro", "伍長", "Keroro 小隊" )); assertTrue( "無法新增使用者 Dororo!", acl.addUser( "Dororo", "兵長", "Keroro 小隊" )); assertTrue( "無法新增使用者 Tamama!", acl.addUser( "Tamama", "二等兵", "Keroro 小隊" ));

// 必須要有 5 個使用者喔! Properties[] prop = acl.getUsers(); assertEquals( "使用者設定數不為 5 !", 5, prop.length ); System.out.println( "=======================" );

// 把所有使用者內容印出來! for( int i = 0; i < prop.length; i++ ) { System.out.println( "名稱:" + prop[i].getProperty( "Name" )); System.out.println( "階級:" + prop[i].getProperty( "Description" ) ); System.out.println( "所屬小隊:" + prop[i].getProperty( "Resource" )); System.out.println( "----------------------" ); }

// 測試移除所有使用者後之傳回狀況 acl.removeUser( "Keroro" ); acl.removeUser( "Kururu" ); acl.removeUser( "Giroro" ); acl.removeUser( "Dororo" ); acl.removeUser( "Tamama" );

// 再檢查所有使用是否都已全部移除! assertNull( "未全數移除使用者資訊!", acl.getUsers() ); }

然後還有這一段程式碼跑出來:
public void testGetPermissionList() {

// 新增使用者 Keroro acl.addUser( "Keroro", "軍曹", "Keroro 小隊" );

// 加上使用權限 assertTrue( "無法新增 Keroro 使用者權限 - 鋼普拉組裝術!", acl.addPermission( "Keroro", "鋼普拉組裝術" )); assertTrue( "無法新增 Keroro 使用者權限 - Kero Ball 借出許可(限日向冬樹專屬)!", acl.addPermission( "Keroro", "Kero Ball 借出許可", null, "日向冬樹" )); assertTrue( "無法新增 Keroro 使用者權限 - 吸收君(限日向家專用)", acl.addPermission( "Keroro", "吸收君", null, "日向家" )); assertTrue( "無法新增 Keroro 使用者權限 - 食用宇宙即食丸子", acl.addPermission( "Keroro", "食用宇宙即食丸子" ));

// 讀取設定權限 Properties[] prop = acl.getPermissionList( "Keroro" ); assertEquals( "Keroro 使用權限不為 4!", 4, prop.length );

// 逐一列出權限內容 System.out.println( "=======================" ); for( int i = 0; i < prop.length; i++ ) { System.out.println( "功能名稱:" + prop[i].getProperty( "Name" )); System.out.println( "功能說明:" + prop[i].getProperty( "Description" ) ); System.out.println( "使用限制:" + prop[i].getProperty( "Resource" )); System.out.println( "----------------------" ); }

// 移除所有權限 assertTrue( "無法移除 Keroro 使用者權限 - 鋼普拉組裝術!", acl.removePermission( "Keroro", "鋼普拉組裝術" )); assertTrue( "無法移除 Keroro 使用者權限 - 食用宇宙即食丸子", acl.removePermission( "Keroro", "食用宇宙即食丸子" )); assertTrue( "無法移除 Keroro 使用者權限 - Kero Ball 借出許可(限日向冬樹專屬)!", acl.removePermission( "Keroro", "Kero Ball 借出許可", "日向冬樹" )); assertTrue( "無法移除 Keroro 使用者權限 - 吸收君(限日向家專用)!", acl.removePermission( "Keroro", "吸收君", "日向家" ));

// 測試是否還有其他權限設定 assertNull( "未全數移除使用者 Keroro 之權限!", acl.getPermissionList( "Keroro" ));

// 消失吧!Keroror acl.removeUser( "Keroro" ); }

我發誓,我真的不是故意請 Keroro 來當測試協力的!真的,相信我!

不過話說回來,欠缺的使用者權限驗證的測試協力還是請 Keroro 來幫忙好了!