測試框架Unitest的執行原理,以及多個測試類中的執行順序以及簡化方法
阿新 • • 發佈:2019-02-19
單元測試單元測試(unit testing)是指對軟體中的最小可測試單元進行檢查和驗證。對於單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義,如C語言中單元指一個函式,Java裡單元指一個類,圖形化的軟體中可以指一個視窗或一個選單等。總的來說,單元就是人為規定的最小的被測功能模組。單元測試框架在單元測試框架出現之前,開發人員在建立可執行測試時飽受折磨。最初的做法是在應用程式中建立一個視窗,配有"測試控制工具(harness)"。它只是一個視窗,每個測試對應一個按鈕。這些測試的結果要麼是一個訊息框,要麼是直接在窗體本身給出某種顯示結果。由於每個測試都需要一個按鈕,所以這些視窗很快就會變得擁擠、不可管理。 單元測試框架提供了一種統一的程式設計模型,可以將測試定義為一些簡單的類,這些類中的方法可以呼叫希望測試的應用程式程式碼。開發人員不需要編寫自己的測試控制工具;單元測試框架提供了測試執行程式(runner),只需要單擊按鈕就可以執行所有測試。利用單元測試框架,可以很輕鬆地插入、設定和分解有關測試的功能。測試失敗時,測試執行程式可以提供有關失敗的資訊,包含任何可供利用的異常資訊和堆疊跟蹤。不同程式語言有不同的單元測試框架,如Java 的Junit, TestNg, c#的 Nunit,Python的unittest,Pyunit,testtools, subunit....
(1)使用unittests方式去執行程式,最終顯示斷言方法沒有被執行,因為系統預設去執行test開頭的方法(2)一般,在自動化單元測試中,一般把斷言放在測試用例方法中,去判斷結果,而不是單獨寫一個斷言方法 4.Unittests中如果定義了多個類,每個類中也有多個方法,那麼執行的順序是怎樣的?
- 一個TestCase的例項就是一個測試用例。
- 什麼是測試用例呢?就是一個完整的測試流程,包括測試前準備環境的搭建(setUp),執行測試程式碼(run),以及測試後環境的還原(tearDown)。
- 元測試(unit test)的本質也就在這裡,一個測試用例是一個完整的測試單元,通過執行這個測試單元,可以對某一個問題進行驗證。
- 而多個測試用例集合在一起,就是TestSuite,而且TestSuite也可以巢狀TestSuite。
- TestLoader是用來載入TestCase到TestSuite中的,其中有幾個loadTestsFrom__()方法,就是從各個地方尋找TestCase,建立它們的例項,然後add到TestSuite中,再返回一個TestSuite例項。
- TextTestRunner是來執行測試用例的,其中的run(test)會執行TestSuite/TestCase中的run(result)方法。
- 測試的結果會儲存到TextTestResult例項中,包括運行了多少測試用例,成功了多少,失敗了多少等資訊。
- 那什麼是test fixture呢?
- Test authors should subclass TestCase for their own tests. Construction and deconstruction of the test's environment ('fixture') can be implemented by overriding the 'setUp' and 'tearDown' methods respectively.
assertEqual(a, b) | 判斷a==b |
assertNotEqual(a, b) | 判斷a!=b |
assertTrue(x) | bool(x) is True |
assertFalse(x) | bool(x) is False |
assertIs(a, b) | a is b |
assertIsNot(a, b) | a is not b |
assertIsNone(x) | x is None |
assertIsNotNone(x) | x is not None |
assertIn(a, b) | a in b |
assertNotIn(a, b) | a not in b |
assertIsInstance(a, b) | isinstance(a, b) |
assertNotIsInstance(a, b) | not isinstance(a, b) |