Ich bin neu im Komponententest, also würde ich gerne die Meinung von einigen einholen, die ein wenig mehr eingeweiht sind.
Ich muss in Kürze einen Screen-Scraping-Code schreiben. Das Zielsystem ist ein Web-UI, in dem umfangreiche HTML-Parsing und ähnliche volatile Goodness involviert sind. Ich werde niemals über Änderungen durch das Zielsystem informiert (z. B. wenn sie ihre Website neu gestalten oder ihre Funktionalität anderweitig ändern). Also erwarte ich, dass mein Code regelmäßig bricht.
Also denke ich, meine wirkliche Frage ist, wie viel, wenn überhaupt, meiner Unit Tests sich um die Schnittstelle (die Website, die ich scraping) kümmern sollte oder sich mit ihr beschäftigen sollte?
Ich denke, Unit-Tests oder nicht, ich werde zur Laufzeit stark testen müssen, da ich sicherstellen muss, dass die Daten, die ich konsumiere, makellos sind. Selbst wenn ich Unit-Tests vor jedem Lauf ausführen würde, könnte sich die Web-Benutzeroberfläche immer noch zwischen Tests und Laufzeit ändern.
Also konzentriere ich mich auf das In-Code-Testen und die Ausnahmebehandlung? Bedeutet das, eine Linie in den Sand zu zeichnen und diese Art des Testens aus Unit-Tests auszuschließen?
Danke
Unit-Tests sollten immer so ausgelegt sein, dass sie wiederholbare bekannte Ergebnisse liefern.
Um einen Screen-Scraper Unit-Test zu testen, sollten Sie daher den Test mit einem bekannten HTML-Satz schreiben (Sie können ein Mock-Objekt verwenden, um dies darzustellen)
Die Art von Sache, über die du redest, klingt für mich nicht wirklich nach einem Szenario für Unit-Testing. Wenn du sicherstellen willst, dass dein Code so robust wie möglich läuft, dann ist es mehr, wie du sagst -Code-Tests und die Ausnahmebehandlung.
Ich würde auch einen Alarmierungscode einfügen, damit das System Sie auf Fälle aufmerksam macht, in denen der HTML-Code nicht wie erwartet analysiert wird.
Sie sollten versuchen, Ihre Tests so weit wie möglich zu trennen. Testen Sie die Datenverarbeitung mit Low-Level-Tests, die den eigentlichen Code ausführen (d. H. nicht über einen simulierten Browser).
Stellen Sie im simulierten Browser sicher, dass die richtigen Dinge passieren, wenn Sie auf Schaltflächen klicken, Formulare absenden und Links folgen.
Versuchen Sie niemals zu testen, ob das Layout korrekt ist.
Ich denke, dass die Unit-Tests hier nützlich sein können, wenn Sie einen Build-Server haben, werden sie Ihnen eine frühe Warnung geben, dass der Code nicht mehr funktioniert. Sie können keinen Komponententest schreiben, um zu beweisen, dass screenscraping immer noch funktioniert, wenn die Seite ihren HTML-Code ändert (weil Sie nicht sagen können, was sie ändern werden).
Sie können möglicherweise einen Komponententest schreiben, um zu überprüfen, ob von Ihren Bemühungen etwas Nützliches zurückgegeben wird.
Tags und Links unit-testing exception-handling phpunit screen-scraping