Heim > CMS-Tutorial > WordDrücken Sie > Unit-Testing-Theorie (Fortsetzung): Teil 2

Unit-Testing-Theorie (Fortsetzung): Teil 2

WBOY
Freigeben: 2023-09-02 14:37:14
Original
983 Leute haben es durchsucht

单元测试理论(续):第 2 部分

Im letzten Artikel haben wir begonnen, die Theorie des Unit-Tests in WordPress zu diskutieren. Konkret überprüfen wir unsere Arbeit an Unit-Testing-Themen und Plugins, besprechen dann Codeeinheiten und wie sich dies auf unsere Tests auswirkt, und überprüfen Unit-Tests in der größeren Welt der Softwareentwicklung.

Wir werden weiterhin die Theorie des Unit-Tests in WordPress diskutieren, aber aus der Perspektive, wie es dabei helfen kann, Probleme zu identifizieren, Architektur voranzutreiben, Projekte zu dokumentieren und mehr.


Probleme finden und Zeit sparen

Erinnern Sie sich an den Anfang dieser Serie, dass der traditionelle Ansatz für Unit-Tests wie folgt aussieht:

  • Schreiben Sie einen Test, führen Sie ihn aus (im Wissen, dass er fehlschlagen wird)
  • Schreiben Sie eine Funktion, um diese Methode auszuführen.
  • Führen Sie den Test durch. Wenn der Test fehlschlägt, fahren Sie mit der Arbeit an der Funktion fort; andernfalls fahren Sie mit dem nächsten fort.

Ja, der erste Schritt ist etwas dogmatisch. Warum sollten Sie Zeit damit verschwenden, etwas auszuführen, von dem Sie wissen, dass es scheitern wird? Aber Sie verstehen, worauf es ankommt. Aber wenn Sie anfangen, diese spezielle Technik auf die Entwicklung anzuwenden, werden Sie feststellen, dass Sie beim Schreiben von Code einen bestimmten Rhythmus entwickeln, und das ist Teil des Gesamtziels.

Aber das ist nur die Hälfte – Unit-Tests können Ihnen tatsächlich helfen, Probleme frühzeitig in der Entwicklung zu erkennen.

Um dies zu verstehen, ist es am besten, diese Idee noch einmal durchzugehen.

Angenommen, Sie entwickeln eine Funktion für ein WordPress-basiertes Projekt, mit der Sie Benutzern die Erstellung von Benutzerkonten ermöglichen, ohne sich tatsächlich beim WordPress-Dashboard anzumelden. Dies setzt voraus, dass Sie eine Seitenvorlage für die Registrierung, die erforderliche Überprüfung und den Code zum Generieren von Passwörtern und E-Mails eingerichtet haben.

Sie laden eine Seite in Ihrem Browser und versuchen, einige Benutzer zu erstellen – einige mit derselben E-Mail-Adresse, einige mit falschen Passwörtern, einige mit illegalen Zeichen usw. Sie verstehen, dass es mehrere Möglichkeiten gibt, zu überprüfen, ob die Prüfung erfolgreich ist oder nicht. Das ist so hart! Das bedeutet, dass Sie jedes Mal, wenn Sie die Benutzerregistrierungsfunktion ändern, dieselben n Registrierungen durchführen müssen, um sicherzustellen, dass keine Probleme auftreten.

Oder Sie können eine Reihe von Tests schreiben, um damit umzugehen, und sie jedes Mal ausführen, wenn sich der Code ändert.

Ja, das Schreiben von Unit-Tests kann viel Zeit in Anspruch nehmen, aber sehen Sie sich die Zeitersparnis jedes Mal an, wenn Sie eine Codeeinheit ändern. Dies lohnt sich auf jeden Fall und kann dazu beitragen, Probleme frühzeitig zu erkennen (d. h. vor der Freigabe für die Produktion), die möglicherweise übersehen wurden, weil jemand vergessen hat, eine Permutation des Tests zu simulieren.


Selbstaufnahme

Beim Schreiben von Unit-Tests verbessern Sie nicht nur die Qualität Ihres Codes, indem Sie sicherstellen, dass er tatsächlich funktioniert, sondern Sie stellen im Wesentlichen auch eine entwicklerorientierte Dokumentation bereit.

Wenn Sie eine in Ihr Produkt integrierte Funktion einem Unit-Test unterziehen, stellen Sie eine Dokumentation darüber zur Verfügung, wie die Funktion funktioniert, wann sie fehlschlagen sollte und wann sie bestanden werden sollte.

Damit gehen einige Annahmen einher: Insbesondere benennen und gruppieren Sie Ihre Funktionen und die zugehörigen Tests logisch und testen jede Funktion korrekt.

Mit PHPUnit können WordPress-Unit-Tests einfach leicht lesbare Behauptungen ausführen. Sie deklarieren einfach „assertTrue“, „assuranceFalse“ oder eine andere verfügbare Behauptung für die Funktionen, aus denen Ihr Projekt besteht.

In Anlehnung an das obige Beispiel bedeutet dies, dass Sie eine Funktion schreiben können, die sicherstellt, dass die Benutzerregistrierungsfunktion fehlschlägt, wenn versucht wird, sich mit einer leeren E-Mail-Adresse zu registrieren:

$this->assertFalse( registerNewUser( '' ) );
Nach dem Login kopieren

Vielleicht ein einfaches Beispiel, aber der Punkt bleibt bestehen: Ihr Code wird selbstdokumentierend und erfordert nur das Schreiben klarer Komponententests.


Architektur

Einer der vielleicht am meisten unterschätzten Vorteile von Unit-Tests besteht darin, dass es dabei helfen kann, die Architektur Ihres Projekts voranzutreiben. Typischerweise kann die Theme- oder Plugin-Entwicklung auf zwei Arten beginnen:

  1. Listen Sie die Funktionen auf, zeichnen Sie die Benutzeroberfläche und schreiben Sie dann den Code
  2. Zeichnen Sie ein Diagramm, wie die Dateien zusammenarbeiten, und schreiben Sie dann den Code

Das sind nicht grundsätzlich schlechte Dinge, aber ich denke, sie sind schwach (ich gebe als Erster zu, dass ich mehr tue, als ich teilen möchte!). Aber der Schritt „Schreiben Sie den Code“ bringt eine Menge Verantwortung mit sich, nicht wahr?

Es ist jedem, der schon lange programmiert, so vertraut, dass einem irgendwann klar wird: „Oh ... daran habe ich nicht gedacht.“

Wenn Sie Glück haben, bedeutet dies normalerweise, dass Sie eine Hilfsmethode oder eine andere Bedingung schreiben können, um den Fall zu behandeln, den Sie ignoriert haben. Im schlimmsten Fall bedeutet dies jedoch, dass Sie möglicherweise Ihre gesamte Klasse oder gesamte Sammlungsfunktion neu entwerfen müssen, um dieses Problem zu lösen .

Unit-Tests sind zwar nicht perfekt, können aber helfen, diese Situation zu entschärfen.

Denken Sie daran, dass Sie von Anfang an eine Liste aller Funktionen haben, die Ihr Theme oder Plugin bieten soll. Sie haben noch keinen Code geschrieben, aber vielleicht haben Sie eine Art UI-Skizze und/oder eine Reihe von Klassendiagrammen.

接下来,您开始编写要编写的测试以测试您的项目。回想一下,单元测试的一部分是将代码分解为尽可能的原子单元,因此您的任务是为每个单元编写单元测试,咳咳

由于单元测试的性质,您本质上会以不同的方式思考您的代码:您正在考虑“编写测试”,而不是“编写代码”,并且因为您必须在更原子的级别上进行思考,您会情不自禁地考虑经常被归入“编写代码”的边缘案例。


代码的语言

作为开发人员,我们非常习惯使用不断强化我们编写代码的约定。我的意思是,我们倾向于提供缩写的变量名称、神秘的函数名称和类名称,这些名称对于您自己或项目团队之外的任何人来说可能没有任何意义。

单元测试不一定是编写更易于阅读的代码的关键,但它可以进一步帮助提供更清晰的函数名称。

回想一下您读过的第一本编程书、您参加的第一堂计算机科学课或者您看到的第一段开源代码,方法名称通常是动词。为什么他们不应该这样?方法是封装代码的方法,做一些事情。但随着我们在项目上工作的时间越来越长,我们变得越来越懒,我们的代码从“register_user_and_email_password()”变成“new_account()”。

显然,前者比后者更清晰,但如果我们致力于高质量的单元测试,并且希望确保我们的单元测试易于阅读,为了使它们易于阅读,我们的函数名称必须易于阅读。

这不是更容易阅读吗:

$this->assertFalse( register_user_and_email_password( '' ) );
Nach dem Login kopieren

而不是这个?

$this->assertFalse( new_account( '' ) );
Nach dem Login kopieren

同样,这也许是一个简单的示例,但原则仍然是:编写良好的单元测试,以帮助自我记录驱动函数语言的代码。


结论

我们已经讨论了单元测试的基础知识以及主要优点,但是我们还没有讨论单元测试带来的缺点,我们甚至还没有考虑如何将其合并到我们的项目中。工作流程。

因此,在下一篇文章中,我们将尝试做到这一点。

Das obige ist der detaillierte Inhalt vonUnit-Testing-Theorie (Fortsetzung): Teil 2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage