2016-09-21 96 views
0

我有一個類的任務,我想了解周圍的框架。Python類中的測試用例

我已經創建了一個StringCalculator類模塊,然後創建了一個測試文件。

在創建用於針對我的班級模塊運行的測試文件中,我有許多「方法」。一般來說,這些「方法」是否會算作一個測試用例,還是應該更像doctest?

請原諒我,因爲我是新來的編程和我只是有一個很難搞清楚了這一點周圍的框架和測試案例。所以請不要擱置這個帖子或任何東西。我願意回答你所提出的任何問題。再次,我是一個新手。我只需要知道我在代碼中概述的內容是否被認爲是測試用例。

下面的代碼是什麼,我有我的測試文件:

import unittest 
from StringCalculatorClass2 import StringCalculator 

class TestStringCalculatorClass(unittest.TestCase): 

    def test_add_empty_string(self): 
     string_calculator = StringCalculator() 
     result = string_calculator.add("") 
     assert 0 == result 

    def test_add_one(self): 
     string_calculator = StringCalculator() 
     result = string_calculator.add("1") 
     assert 1 == result 

    def test_add_two(self): 
     string_calculator = StringCalculator() 
     result = string_calculator.add("2") 
     assert 2 == result 

    def test_add_one_and_two(self): 
     string_calculator = StringCalculator() 
     result = string_calculator.add("1,2") 
     assert 3 == result 

    def test_add_five_numbers(self): 
     string_calculator = StringCalculator() 
     result = string_calculator.add("1,2,17,4,1,1") 
     assert 26 == result 

    def test_add_with_new_line(self): 
     string_calculator = StringCalculator() 
     result = string_calculator.add("1,2\n17") 
     assert 20 == result 

    def test_is_new_delimiter_set(self): 
     string_calculator = StringCalculator() 
     result1 = string_calculator._is_new_delimiter_set("//;\n1;2;17\n5") 
     result2 = string_calculator._is_new_delimiter_set("1;2;17\n5") 
     assert True == result1 
     assert False == result2 

    def test_get_new_delimiter(self): 
     string_calculator = StringCalculator() 
     result = string_calculator._get_new_delimiter("//;\n1;2;17\n5") 
     assert ';' == result 

    def test_get_string_without_delimiter(self): 
     string_calculator = StringCalculator() 
     result = string_calculator._get_string_without_delimiter("//;\n1,2") 
     assert "1,2" == result 

    def test_call_add_with_new_delimiter(self): 
     string_calculator = StringCalculator() 
     result = string_calculator.add("//;\n1;2;17\n5") 
     assert 25 == result 

    def test_create_error_message_for_negative_numbers(self): 
     string_calculator = StringCalculator() 
     negative_numbers = [-1, -2, -3] 
     result = string_calculator._create_error_message(negative_numbers) 
     assert 'negatives not allowed: -1, -2, -3' == result 

    def test_negative_numbers_raises_exception(self): 
     string_calculator = StringCalculator() 
     exception_raised = False 
     try: 
      result = string_calculator.add("-1") 
     except Exception: 
      exception_raised = True 
     assert True == exception_raised 

    def test_negative_number_raises_exception_with_message(self): 
     string_calculator = StringCalculator() 
     exception_raised = False 
     exception_message = "" 
     try: 
      result = string_calculator.add("-1") 
     except Exception as err: 
      exception_message = err 
      exception_raised = True 
     assert True == exception_raised 
     assert 'negatives not allowed: -1' == exception_message.args[0] 

    def test_multiple_negative_numbers(self): 
     string_calculator = StringCalculator() 
     exception_raised = False 
     exception_message = "" 
     try: 
      result = string_calculator.add("2,-1,4,-2") 
     except Exception as err: 
      exception_message = err 
      exception_raised = True 
     assert True == exception_raised 
     assert 'negatives not allowed: -1, -2' == exception_message.args[0] 

if __name__ == '__main__': 
    unittest.main() 
+0

要添加這個,當我運行測試文件時,我在PyCharm中得到了這個:測試在10:50 PM開始... Traceback(最近調用最後一次): 文件「C:\ Program Files(x86 )\ JetBrains \ PyCharm社區版2016.2.2 \ helpers \ pycharm \ utrunner.py「,第172行,在 module = loadSource(a [0]) 文件「C:\ Program Files(x86)\ JetBrains \ PyCharm Community Edition 2016.2.2 \ helpers \ pycharm \ utrunner.py」,第65行,在loadSource module = imp.load_source(moduleName,fileName) IOError:[Errno 2]沒有這樣的文件或目錄 處理完成退出代碼1 –

回答

0

是方法算作測試案例。正確的方法是使用unittest.TestCase類的斷言函數,而不是默認的python assert。因此,例如第一次測試,你應該有這樣的代碼:

def test_add_empty_string(self): 
    string_calculator = StringCalculator() 
    result = string_calculator.add("") 
    self.assertEqual(result, 0) 

有各種各樣的unittest.TestCase類斷言,像assertTrueassertFalse,...

你可以閱讀更多關於單元測試在這裏:https://docs.python.org/2/library/unittest.html

+0

謝謝您的確認! –

+0

@JoeDeneca沒問題。如果它有幫助,請接受答案。 – afsafzal