2016-11-02 2 views
1

Ich habe verschiedene Formen dieses Problems wiederholt mit PyCharm und nosetest Integration.PyCharm Nosetests - unerkannte Tests

Mit der rechten Maustaste werden bestimmte Tests nicht erkannt oder die Klasse/das Modul enthält überhaupt keine Tests.

Ich habe viele, viele SO Antworten gesucht und bin immer noch nicht auf den Grund gegangen.

Hier ist die aktuelle Wiedergabe des Problems. Der Inhalt der Tests ist nicht wirklich relevant, aber es testet einen Singleton-Wrapper um eine DB-Schnittstelle herum.

class MyDBTest(unittest.TestCase): 

    def setup(self): 
    self.db = db_utils.get_connection(constants) 

    def teardown(self): 
    db_utils.truncate_all_my_tables(self.db) 
    self.db.commit() 
    self.db.close() 

    def test_same_instance(self): 
    other_instance = db_utils.get_connection(constants) 
    assert other_instance is self.db 

    def test_basic_query(self): 
    cur = self.db.cursor() 
    sql = "SELECT %s" 
    cur.execute(sql, "Test") 
    assert cur.rowcount == 1, "Expected one row, got <{0!s}>".format(cur.rowcount) 

    def test_reopen_connection(self): 
    self.db.close() 
    self.db = db_utils.get_connection(constants) 
    cur = self.db.cursor() 
    sql = "SELECT %s" 
    cur.execute(sql, "Test") 
    assert cur.rowcount == 1, "Expected one row, got <{0!s}>".format(cur.rowcount) 

Wenn ich nach rechts auf dem Test auf „test_basic_query“ Ich habe die Kontextmenü-Option erhalten: „Run Nosetest test_basic_query“ und klicken in der Tat den Test nicht ausgeführt werden, einschließlich der Auf- und Abbau.

Wenn Sie jedoch mit der rechten Maustaste auf die anderen Tests klicken, wird nur die Option "run test_db_wrapper" angezeigt. Ein Rechtsklick auf die Datei im Projektfenster bietet nur diese Option.

Das Ausführen dieser Datei von der Befehlszeile mit der ausführbaren Datei von nosetests3 macht etwas noch seltsamer. Es führt alle drei Tests aus, führt jedoch das Setup und den Teardown nicht aus.

Hinweis Ich habe versucht, die Tests neu zu ordnen und die Tests umzubenennen. Ich habe versucht, von Objekt, nichts oder unittest zu erben. TestCase. Ich habe andere Test-Klassen, die genau so aussehen und sie funktionieren.

Dies ist nur ein Beispiel, das passiert uns die ganze Zeit. Es scheint nur zufällig.

PyCharm Version ist: PyCharm Community Edition 2016.01.04 Build # PC-145,1504, am 25. Mai gebaut 2016 JRE: 1.8.0_76-release-B198 amd64 JVM: OpenJDK 64-Bit Server VM von JetBrains

sro
+0

Bitte korrigieren Sie Ihre Einrückung. – erip

+0

Fügen Sie auch zum Ende Ihres Tests 'if __name__ ==" __main__ ": unittest.main()' hinzu. – erip

+0

Einrückung fixiert. –

Antwort

2

Bisher hier sind die Dinge, die ich gefunden habe das oben beschriebene Szenario verhindern:

  1. Der Test Klassenname mit „Test“ beginnen sollte „TestFoo“ zum Beispiel
  2. Der Test Dateinamen beginnen sollen mit Test, te st_my_class.py zum Beispiel
  3. Testmethoden sollten zum Beispiel mit dem Wort test "test_no_results (self)" beginnen. Ebenso sollten Nicht-Testmethoden keinen Test, Setup oder Teardown enthalten (zur Vereinfachung) - create_test_data (self): zB
  4. PyCharm kann ein bisschen komisch sein und es kann eine Weile dauern, um Änderungen zu erkennen, die man an Testklassen macht Wenn Sie die Tests (einschließlich Setup und Teardown) durch Ausführung von "nosetests" über die Befehlszeile überprüfen, aber nicht in PyCharm arbeiten, versuchen Sie, PyCharm neu zu starten und den Cache zu löschen.
  5. Sie müssen nicht unitest.TestCase erweitern, um Nosetests zu verwenden. In der Tat kann dies Ihr Leben in Bezug auf Itelisense und Autocomplete-Methodennamen bei der Bearbeitung komplizierter machen.