2017-03-26 7 views
1

Neu bei Python, ich möchte lernen, mit Python zu codieren, indem ich den Code, den ich schreibe, entweder mit pytest oder mit unittest ausprobiere. In diesem Zusammenhang frage ich mich, wie Aussagen über mehrere Arrays als Eingänge testen:Wie schreibt man Tests für mehrere ganze Zahlen?

Ich habe eine Funktion extractDifferentNumber, die eine ganze Zahl zurückkehren soll nicht auf den Rest der Folge von ganzen Zahlen gehören:

def extractDifferentNumber(df): 
    df_set = set(df) 
    for each in df_set: 
     if df.count(each) == 1: 
      return each 

, die aus einer Folge von Zahlen, die unterschiedliche Anzahl Auszüge:

# print(extractDifferentNumber([10,11,10,10,10,10,10])) 11 
# print(extractDifferentNumber([20,11,20,20,20])) 11 
# print(extractDifferentNumber([1,1,1,1,2])) 2 

Nun möchte Ich mag Unittest verwenden, um sicherzustellen, dass meine Funktionen das erwartete Ergebnis zurückgibt:

class SingleDifferentNumberTestCase(unittest.TestCase): 
    """Test for `myfunction.py`""" 

    def setUp(self): 
     self.input = [10,11,10,10,10,10,10] 
     self.expected = [11] 

    def test_is_different(self): 
     """Is a number different then the others""" 
     self.assertTrue(extractDifferentNumber()) 


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

In dieser Hinsicht habe ich zwei Fragen:

Wie kann ich mehrere Arrays/Testfälle als self.input und self.expected und wie kann ich hebe die entsprechende Behauptung wie self.assertTrue zum Beispiel unter Verwendung von Unittest enthalten?

+0

wie etwa [1,2,3]? – Copperfield

+0

@Copperfield: Komm schon, Mann, die Frage ist, wie man Komponententests schreibt. Es geht nicht darum, wie man mit einem bestimmten Algorithmus mit Ecken umgehen kann. Mamba hat uns definitiv einen MVCE zur Verfügung gestellt. – 2ps

+0

@ 2PS gut, Sie schon diesen Teil behandeln, also warum nicht auch Eckfälle zu betrachten, das sind diejenigen, die Ihnen helfen, bessere Algorithmen – Copperfield

Antwort

2

Nur add multiple methods jeweils die mit den Buchstaben beginnen test:

Ein Testfall von Subklassen unittest.TestCase erstellt wird. Die drei Einzeltests sind mit Methoden definiert, deren Namen mit Buchstaben test beginnen. Diese Namenskonvention informiert den Testläufer über , welche Methoden Tests darstellen.

Der Kern jedes Tests ist ein Anruf an assertEqual(), um nach einem erwarteten Ergebnis zu suchen; assertTrue() oder assertFalse(), um eine Bedingung zu überprüfen; oder assertRaises(), um zu überprüfen, ob eine bestimmte Ausnahme ausgelöst wird. Diese Methoden werden anstelle der assert Anweisung verwendet, sodass der Test Läufer alle Testergebnisse sammeln und einen Bericht erstellen kann.


class SingleDifferentNumberTestCase(unittest.TestCase): 
    """Test for `myfunction.py`""" 

    def test_array_1(self): 
     """Is a number different then the others""" 
     self.assertEqual(extractDifferentNumber([10,11,10,10,10,10,10]), 11) 

    def test_array_2(self): 
     self.assertEqual(extractDifferentNumber([20,11,20,20,20]), 11) 

    def test_array_3(self): 
     self.assertEqual(extractDifferentNumber([1,1,1,1,2]), 2)   
+0

Vielen Dank für die Zeitnahme! –

Verwandte Themen