假設你有兩個函數負責攝氏溫度到華氏溫度的來回轉換,清單5給出了進行這些轉換的腳本。
清單5. 轉換(qunit/js/script.js)
function convertFromCelsiusToFahrenheit(c){ var f = c * (9/5) + 32; return f; } function convertFromFahrenheitToCelsius(f){ var c = (f - 32) * (5/9); return c; } |
清單6給出了其各自的測試用例。
清單6. 測試用例(qunit/js/test.js)
module ("Temperature conversion") test("conversion to F", function(){ var actual1 = convertFromCelsiusToFahrenheit(20); equal(actual1, 68, ?Value not correct?); var actual2 = convertFromCelsiusToFahrenheit(30); equal(actual2, 86, ?Value not correct?); }) test("conversion to C", function(){ var actual1 = convertFromFahrenheitToCelsius(68); equal(actual1, 20, ?Value not correct?); var actual2 = convertFromFahrenheitToCelsius(86); equal(actual2, 30, ?Value not correct?); }) |
QUnit中的測試用例由test()方法來定義,邏輯包含在傳遞給該函數的第二個參數中。在清單6中,這兩個測試被分別命名為conversion to F和conversion to C。每個測試都包含了兩個斷言,這些用在測試中的斷言利用了equal()方法,equal()函數讓你比較預期的值和被測試的函數返回的實際值。 equal()方法中的第三個參數是在失敗情況下顯示的信息。
還可以通過module()函數來把一些測試組織成模塊。在清單6中,模塊Temperature conversion擁有兩個測試。
若要運行這些測試:
1. 把源代碼和測試文件放入到HTML測試器中,如清單7所示.
2. 在瀏覽器中打開該HTML頁面。
清單7. 在運行器中包含script.js和test.js
... <script type="text/javascript" src="js/script.js" kesrc="js/script.js">< /script> <script type="text/javascript" src="js/test.js" kesrc="js/test.js">< /script> ... |
圖1展示了QUnit在瀏覽器(Firefox)中顯示結果的方式。
圖1. QUnit結果
清單6中的斷言使用了equal()方法,但這不是QUnit唯一提供的斷言,QUnit提供的其他一些斷言包括了ok()和 strictEqual()。清單8給出了這些方法的運用方式。
清單8. 更多的斷言
module ("Other assertion"); test("assertions", function(){ ok(true); ok(3); strictEqual("c", "c"); equal (3, "3"); }); |
ok()函數檢查第一個參數為true;strictEqual()驗證第一個參數與第二個嚴格相等。幕后實情是,strictEqual()使用了===運算符,而 equal()使用的是==運算符。
如果測試失敗的話,QUnit也會提供一些有用的信息。把清單8中的代碼修改成清單9中的代碼,故最后的一個斷言會失敗。
清單9. 最后一個斷言出現錯誤
module ("Other assertion"); test("assertions", function(){ ok(true); ok(3); strictEqual("c", "c"); strictEqual (3, "3"); }); |
圖2展示了清單9中的代碼的QUnit返回結果。
圖2. QUnit結果——最后一個測試失敗
結果描述得相當詳細,且很容易就跟蹤到最后一個斷言中的預期結果和實際結果之間的不同。
原文轉自:http://www.uml.org.cn/Test/201301152.asp