2016-09-21 6 views
0

Ich habe eine Klassenzuweisung, die ich versuche, das umgebende Framework zu verstehen.Testfälle innerhalb von Python-Klassen

Ich habe ein StringCalculator-Klassenmodul erstellt und dann eine Testdatei erstellt.

Innerhalb der Testdatei, die erstellt wird, um gegen mein Klassenmodul zu laufen, habe ich zahlreiche "Methoden". Werden diese "Methoden" im Allgemeinen als Testfall gelten oder sollte ich mehr wie Doctest machen?

Bitte verzeihen Sie mir, weil ich neu in der Programmierung bin und es mir schwer fällt, das Framework und Testfälle zu verstehen. Also bitte nicht in die Warteschleife oder irgendetwas mit diesem Beitrag. Ich bin bereit, alle Fragen zu beantworten, die Sie mir in den Weg legen. Wieder bin ich ein Neuling. Ich muss nur wissen, ob das, was ich im Code skizziere, als Testfälle betrachtet werden.

Der Code unten ist, was ich für meine Testdatei haben:

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

dies hinzuzufügen, wenn ich die Test-Datei ausführen: testen, um 10:50 Uhr ... begann Traceback (jüngste Aufforderung zuletzt): Datei „C: \ Program Files (x86) \ JetBrains \ PyCharm Community Edition 2016.2.2 \ helpers \ pycharm \ utrunner.py ", Zeile 172, in module = loadSource (a [0]) Datei "C: \ Programme (x86) \ JetBrains \ PyCharm Community Edition 2016.2.2 \ helpers \ pycharm \ utrunner.py", Zeile 65, in loadSource module = imp.load_source (Modulname, Dateiname) IOError: [Errno 2] Keine solche Datei oder Verzeichnis Prozess beendet mit Exit Code 1 –

Antwort

0

Ja die Methoden gelten als Testfälle. Der richtige Weg, dies zu tun, ist Assert-Funktionen der Klasse unittest.TestCase anstelle der Standard-Python assert.

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

Es gibt alle Arten von behauptet in unittest.TestCase Klasse, wie assertTrue, assertFalse, ...

können Sie mehr über Unit-Test lesen Sie hier: So zum Beispiel für den ersten Test Sie diesen Code haben sollten ich erhalte diese in PyCharm https://docs.python.org/2/library/unittest.html

+0

Vielen Dank für die Bestätigung !!!! –

+0

@JoeDeneca Kein Problem. Wenn es geholfen hat, akzeptiere bitte die Antwort. – afsafzal