[gelöst] Python: multiple assert() in einem Test

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
buhtz
Beiträge: 1105
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

[gelöst] Python: multiple assert() in einem Test

Beitrag von buhtz » 20.08.2019 10:15:28

Spricht etwas dagegen mehrere assert*() Aufrufe in einer Testfunktion zu haben?

Beispiel:

Code: Alles auswählen

class MyTest(unittest.TestCase):
    # ...
    def test_name(self):
        p = Person('Doe')
        assertTrue(p.name, 'Doe')
        p.name = 'Marry'
        assertFalse(p.name, 'Doe')
        assertTrue(p.name, 'Marry')
Technisch funktioniert es schon. Ist es sauber/pythonic? Ich sehe in den Beispielen so etwas eigentlich nie.
Will aber auch nicht für jeden Kleinkram(!) ne neue Funktion machen müssen.
Zuletzt geändert von buhtz am 28.08.2019 07:23:41, insgesamt 1-mal geändert.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

cronoik
Beiträge: 2049
Registriert: 18.03.2012 21:13:42
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Python: multiple assert() in einem Test

Beitrag von cronoik » 20.08.2019 18:44:50

Meiner Auffassung nach sollte es grundsaetzlich das Ziel sein, dass ein Unittest aus genau einem Grund fehlschlaegt. Das heisst wenn deine Unitstests laufen und du dir die fehlgeschlagenen Tests anschaust, dann sollte dir klar sein an welcher Stelle die Ursache sein koennte. In deinem Test testest du nur eine Sache (Klassenattribut name) und deshalb finde ich diesen Test in Ordnung. Wuerdest du aber noch andere Attribute testen, dann wuerde ich deinen Unittest als nicht hilfreich ablehnen. An welcher Stelle allerdings die Grenze gezogen wird, haengt immer von der Person ab mit der du sprichst und mit deren Erfahrungen.
Hilf mit unser Wiki zu verbessern!

reox
Beiträge: 2463
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: Python: multiple assert() in einem Test

Beitrag von reox » 22.08.2019 09:05:53

Mh also ich schreibe das immer so. Ich teste halt eine unit in einer funktion, also zB gibts eine funktion add(a, b), dann teste ich halt das gesamte verhalten in einer funktion test_add.
Der Testrunner zeigt ja normalerweise an wo was nicht geklappt hat.

Allerdings gibts da auch Meinungsverschiedenheiten ob assertTrue oder assertEqual verwendet werden sollte...

Antworten