<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    13.4. 正面測試 (Testing for success)

                    單元測試的基礎是構建獨立的測試用例 (test case)。一個測試用例只回答一個關于被測試代碼的問題。

                    一個測試用例應該做到:

                    基于如上原則,讓我們構建第一個測試用例。應符合如下要求

                    1. toRoman 應該為所有 13999 的整數返回羅馬數字表示。

                    例 13.2. testToRomanKnownValues

                    
                    class KnownValues(unittest.TestCase):                           1
                        knownValues = ( (1, 'I'),
                                        (2, 'II'),
                                        (3, 'III'),
                                        (4, 'IV'),
                                        (5, 'V'),
                                        (6, 'VI'),
                                        (7, 'VII'),
                                        (8, 'VIII'),
                                        (9, 'IX'),
                                        (10, 'X'),
                                        (50, 'L'),
                                        (100, 'C'),
                                        (500, 'D'),
                                        (1000, 'M'),
                                        (31, 'XXXI'),
                                        (148, 'CXLVIII'),
                                        (294, 'CCXCIV'),
                                        (312, 'CCCXII'),
                                        (421, 'CDXXI'),
                                        (528, 'DXXVIII'),
                                        (621, 'DCXXI'),
                                        (782, 'DCCLXXXII'),
                                        (870, 'DCCCLXX'),
                                        (941, 'CMXLI'),
                                        (1043, 'MXLIII'),
                                        (1110, 'MCX'),
                                        (1226, 'MCCXXVI'),
                                        (1301, 'MCCCI'),
                                        (1485, 'MCDLXXXV'),
                                        (1509, 'MDIX'),
                                        (1607, 'MDCVII'),
                                        (1754, 'MDCCLIV'),
                                        (1832, 'MDCCCXXXII'),
                                        (1993, 'MCMXCIII'),
                                        (2074, 'MMLXXIV'),
                                        (2152, 'MMCLII'),
                                        (2212, 'MMCCXII'),
                                        (2343, 'MMCCCXLIII'),
                                        (2499, 'MMCDXCIX'),
                                        (2574, 'MMDLXXIV'),
                                        (2646, 'MMDCXLVI'),
                                        (2723, 'MMDCCXXIII'),
                                        (2892, 'MMDCCCXCII'),
                                        (2975, 'MMCMLXXV'),
                                        (3051, 'MMMLI'),
                                        (3185, 'MMMCLXXXV'),
                                        (3250, 'MMMCCL'),
                                        (3313, 'MMMCCCXIII'),
                                        (3408, 'MMMCDVIII'),
                                        (3501, 'MMMDI'),
                                        (3610, 'MMMDCX'),
                                        (3743, 'MMMDCCXLIII'),
                                        (3844, 'MMMDCCCXLIV'),
                                        (3888, 'MMMDCCCLXXXVIII'),
                                        (3940, 'MMMCMXL'),
                                        (3999, 'MMMCMXCIX'))                        2
                    
                        def testToRomanKnownValues(self):                           3
                            """toRoman should give known result with known input"""
                            for integer, numeral in self.knownValues:              
                                result = roman.toRoman(integer)                     4 5
                                self.assertEqual(numeral, result)                   6
                    1 編寫測試用例的第一步就是繼承 unittest 模塊中的 TestCase 類,它提供了很多可以用在你的測試用例中來測試特定情況的有用方法。
                    2 這是我手工轉換的一個 integer/numeral 對列表。它包含了最小的十個數、最大的數、每個單字符羅馬數字對應的數,以及其他隨機挑選的有效數樣本。單元測試的關鍵不在于所有可能的輸入,而是一個有代表性的樣本。
                    3 每個獨立測試本身都是一個方法,既不需要參數也不返回任何值。如果該方法正常退出沒有引發異常,測試被認為通過;如果測試引發異常,測試被認為失敗。
                    4 這里你真正調用了 toRoman 函數。(當然,函數還沒有編寫,但一旦被編寫,這里便是調用之處。) 注意你在這里為 toRoman 函數定義了 API :它必須接受整數 (待轉換的數) 并返回一個字符串 (對應的羅馬數字表示),如果 API 不是這樣,測試將失敗。
                    5 同樣值得注意,你在調用 toRoman 時沒有試圖捕捉任何可能發生的異常。這正是我們所希望的。以有效輸入調用 toRoman 不會引發任何異常,而你看到的這些輸入都是有效的。如果 toRoman 引發了異常,則測試失敗。
                    6 假設 toRoman 函數被正確編寫,正確調用,運行成功并返回一個值,最后一步便是檢查這個返回值正確 與否。這是一個常見的問題,TestCase 類提供了一個方法:assertEqual,來測試兩個值是否相等。如果 toRoman 返回的結果 (value) 不等于我們預期的值 (numeral),assertEqual 將會引發一個異常,測試也就此失敗。如果兩個值相等,assertEqual 什么也不做。如果每個從 toRoman 返回的值都等于預期值,assertEqual 便不會引發異常,于是 testToRomanKnownValues 最終正常退出,這意味著 toRoman 通過了該測試。

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频