Frage

Allgemein

  • Folgen Sie den gleichen Standards für alle Tests.
  • Seien Sie klar, was jeder Testzustand ist.
  • Seien Sie konkret über das erwartete Verhalten.

Beispiele

1) MethodName_StateUnderTest_ExpectedBehavior

Public void Sum_NegativeNumberAs1stParam_ExceptionThrown() 

Public void Sum_NegativeNumberAs2ndParam_ExceptionThrown () 

Public void Sum_simpleValues_Calculated ()

Quelle: Standards für Unit Tests Naming

2) Die Trennung jedes Wort durch Unders

Public void Sum_Negative_Number_As_1st_Param_Exception_Thrown() 

Public void Sum_Negative_Number_As_2nd_Param_Exception_Thrown () 

Public void Sum_Simple_Values_Calculated ()

Andere

  • Ende Methodennamen mit Test
  • Start Methodennamen mit Klassennamen
War es hilfreich?

Lösung

Ich bin ziemlich viel mit Ihnen auf diesen einen Mann. Die Namenskonventionen Sie verwendet haben, sind:

  • Löschen über das, was jeder Testzustand ist.
  • Spezifische über das erwartete Verhalten.

Was brauchen Sie von einem Testnamen?

Im Gegensatz href="https://stackoverflow.com/questions/96297/naming-conventions-for-unit-tests#96476"> Ray Antwort auf Ich glaube nicht das Test Präfix erforderlich ist. Es ist Testcode, das wissen wir. Wenn Sie dies tun müssen, um den Code zu identifizieren, dann haben Sie größere Probleme, Ihr Testcode nicht mit dem Produktionscode verwechselt werden soll.

Wie für Länge und die Verwendung von Strich, sein Testcode , der die Hölle Sorgen? Nur Sie und Ihr Team sehen es, so lange wie es lesbar ist, und klar, was der Test tut, weitermachen! :)

Das heißt, ich bin noch recht neu zu Tests und Bloggen meine Abenteuer mit ihm :)

Andere Tipps

Dies ist auch lesenswert: Strukturierung Unit Tests

  

Die Struktur einer Testklasse pro Klasse hat getestet. Das ist nicht so ungewöhnlich. Aber was war ungewöhnlich für mich war, dass er eine verschachtelte Klasse für jede Methode hatte getestet.

z.

using Xunit;

public class TitleizerFacts
{
    public class TheTitleizerMethod
    {
        [Fact]
        public void NullName_ReturnsDefaultTitle()
        {
            // Test code
        }

        [Fact]
        public void Name_AppendsTitle()
        {
            // Test code
        }
    }

    public class TheKnightifyMethod
    {
        [Fact]
        public void NullName_ReturnsDefaultTitle()
        {
            // Test code
        }

        [Fact]
        public void MaleNames_AppendsSir()
        {
            // Test code
        }

        [Fact]
        public void FemaleNames_AppendsDame()
        {
            // Test code
        }
    }
}

Und hier ist der Grund:

  

Gut für eine Sache, es ist eine schöne Möglichkeit, Tests zu halten organisiert. All die   Tests (oder Fakten) für ein Verfahren gruppiert werden. Zum Beispiel, wenn   Sie verwenden die STRG + M, STRG + O Verknüpfung Methodenrümpfe zu kollabieren, können Sie   leicht Ihre Tests scannen und sie wie eine Spezifikation für Ihren Code lesen.

Ich mag auch diesen Ansatz:

MethodName_StateUnderTest_ExpectedBehavior

So möglicherweise anpassen, um:

StateUnderTest_ExpectedBehavior

Da jeder Test wird bereits in einer verschachtelten Klasse

Ich neige dazu, die Konvention von MethodName_DoesWhat_WhenTheseConditions so zum Beispiel zu verwenden:

Sum_ThrowsException_WhenNegativeNumberAs1stParam

Doch was muss ich viel sehen, ist der Testnamen folgen der Unit-Tests Struktur

zu machen
  • Anordnen
  • Act
  • Assert

Welche folgt auch die BDD / Gherkin Syntax:

  • Da
  • Wenn
  • Dann

, die den Test in der Art zu nennen wäre: UnderTheseTestConditions_WhenIDoThis_ThenIGetThis

so zu Ihrem Beispiel:

WhenNegativeNumberAs1stParam_Sum_ThrowsAnException

So sehr ich es vorziehen, setze die Methodennamen zuerst getestet werden, weil dann die Tests in alphabetischer Reihenfolge angeordnet sein, oder alphabetisch in dem Kastenelement Drop-Down in VisStudio sortierten erscheinen, und alle Tests für 1 Verfahren zusammengefasst.


Auf jeden Fall, ich mag die Trennung der großen Abschnitte des Testnamen mit Unterstrichen, im Gegensatz zu jedem Wort , weil ich denke, es macht es leichter zu lesen und erhält den Punkt des Tests über.

Mit anderen Worten: Ich mag: Sum_ThrowsException_WhenNegativeNumberAs1stParam besser als Sum_Throws_Exception_When_Negative_Number_As_1st_Param

.

ich meine Testmethoden wie andere Methoden Name „PascalCasing“ ohne Unterstreichungen oder Separatoren. Ich verlasse das postfix Test für das Verfahren aus, weil es keinen Wert hinzufügt. Dass das Verfahren ein Testverfahren wird durch das Attribut angegeben Testmethod .

[TestMethod]
public void CanCountAllItems() {
  // Test the total count of items in collection.
}

Aufgrund der Tatsache, dass jeder Test-Klasse nur eine andere Klasse testen sollte ich den Namen der Klasse aus dem Methodennamen verlassen. Der Name der Klasse, die die Testmethoden enthält, wie die Klasse unter Test mit der Postfix „Tests“ genannt.

[TestClass]
public class SuperCollectionTests(){
    // Any test methods that test the class SuperCollection
}

Für Methoden, die Ausnahmen oder Aktionen testen, die nicht möglich sind, i Präfix des Testverfahrens mit dem Wort kann nicht .

[TestMethod]
[ExpectedException(typeOf(ArgumentException))]
public void CannotAddSameObjectAgain() {
  // Cannot add the same object again to the collection.
}

Mein Name convension ist Basis auf dem Artikel "TDD-Tipps: Konventionen Test Naming & Richtlinien " von Bryan Cook. Ich fand diesen Artikel sehr hilfreich.

Der erste Satz von Namen ist besser lesbar zu mir, da die camelcase Worte und die Unterstriche getrennte Teile des Namensschemas trennt.

Ich neige dazu, auch „Test“ irgendwo enthalten, entweder in den Funktionsnamen oder der umschließenden Namespace oder Klasse.

Solange Sie eine einzelne Praxis folgen, ist es nicht wirklich wichtig. Im Allgemeinen schreiben I eine einzige Einheit Test für ein Verfahren, das alle Varianten für ein Verfahren umfasst (I haben einfache Methoden;) und dann kompliziertere Sätze von Tests für Methoden schreiben, die es benötigen. Meine Namensstruktur ist daher in der Regel Test (ein Überbleibsel aus JUnit 3).

Ich verwende einen ‚T‘ Präfix für die Testnamespaces, Klassen und Methoden.

Ich versuche, ordentlich und Ordner erstellen zu sein, die die Namespaces zu replizieren, dann einen Ordner oder Tests separates Projekt für die Tests erstellen und die Produktionsstruktur für die grundlegenden Tests wiederholen:

AProj
   Objects
      AnObj
         AProp
   Misc
      Functions
         AFunc
   Tests
      TObjects
         TAnObj
            TAnObjsAreEqualUnderCondition
      TMisc
         TFunctions
            TFuncBehavesUnderCondition

Ich kann leicht sehen, dass etwas ein Test ist, ich weiß genau, was ursprünglicher Code es betrifft, (wenn Sie nicht heraus arbeiten können, dann wird der Test auch gewunden sowieso).

Es sieht genauso aus wie die Schnittstellen-Namenskonvention, (ich meine, bekommt man nicht verwirrt mit den Dingen, die mit ‚I‘, noch werden Sie mit ‚T‘).

Es ist einfach, nur mit oder ohne die Tests zusammenstellen.

Es ist gut, in der Theorie wie auch immer, und funktioniert sehr gut für kleine Projekte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top