Public void Sum_NegativeNumberAs2ndParam_ExceptionThrown ()
Public void Sum_simpleValues_Calculated ()
Sursa: Denumire de standarde pentru Teste Unitare
Public void Sum_Negative_Number_As_2nd_Param_Exception_Thrown ()
Public void Sum_Simple_Values_Calculated ()
Eu sunt destul de mult cu voi pe acest om. Convențiile de denumire trebuie utilizate sunt:
De ce mai ai nevoie de un nume de test?
Contrar a Ray's a răspunde am don't cred că Test prefix este necesar. L's cod de încercare, știm asta. Dacă aveți nevoie pentru a face acest lucru pentru a identifica codul, atunci ai probleme mai mari, codul de testare nu ar trebui să fie amestecat cu codul de producție.
În ceea ce privește lungimea și utilizarea de subliniere, sa testul cod, cine naiba îi pasă? Numai tu și echipa ta veți vedea că, atât timp cât acesta este ușor de citit, și clar despre ce test este de a face, continua! :)
Asta a spus, eu sunt încă destul de nou pentru testarea și blogging aventurile mele cu ea :)
Acest lucru este, de asemenea, merită să o citiți: Structurarea Testelor Unitare
structura are o clasa de test pentru fiecare clasă testată. Asta nu e atât de neobișnuit. Dar ceea ce era neobișnuit pentru mine a fost că el a avut o clasa imbricate pentru fiecare metodă testată.
de exemplu
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
}
}
}
Și aici este de ce:
ei Bine, pentru un singur lucru, e un mod frumos de a păstra teste organizate. Toate teste (sau fapte) pentru o metodă sunt grupate împreună. De exemplu, dacă utilizați CTRL+M CTRL+O comandă rapidă la prăbușirea metoda organisme, puteți scanați cu ușurință de teste și citiți-le ca pe un spec pentru cod.
Îmi place, de asemenea, această abordare:
MethodName_StateUnderTest_Expectedbehavior
Deci poate regla la:
StateUnderTest_ExpectedBehavior
Pentru fiecare test va fi deja în clase imbricate
Am tendința de a folosi convenția de MethodName_DoesWhat_WhenTheseConditions` deci, de exemplu:
Cu toate acestea, ceea ce fac vedea o mulțime este de a face testul nume urmați unitate de testare structura de
Care, de asemenea, urmează BDD / Castravecior sintaxa:
care ar fi numele testului, în modul de: UnderTheseTestConditions_WhenIDothis_thenigetthis
deci, pentru exemplul tau:
Cu toate acestea eu de mult prefera pune numele metodei fiind testat în primul rând, pentru că atunci testele pot fi aranjate în ordine alfabetică, sau apar sortate în ordine alfabetică în statele casetă derulantă în VisStudio, și toate testele pentru 1 metode sunt grupate împreună.
În orice caz, îmi place separarea majore secțiuni de numele de test cu subliniere, spre deosebire de orice cuvânt, pentru că eu cred că face mai ușor de citit și înțeles de testare de peste.
Cu alte cuvinte, îmi place: Sum_ThrowsException_WhenNegativenumberas1stparam
mai mult Sum_Throws_Exception_When_Negative_number_as_1st_param
.
Am numele meu de metode de testare ca și alte metode, folosind "PascalCasing", fără nici o subliniere sau separatoare. Plec de la postfix Test pentru metoda, pentru că se adaugă nici o valoare. Care metoda este o metoda de test este indicat de atribut TestMethod.
public void CanCountAllItems() {
// Test the total count of items in collection.
}
Datorită faptului că fiecare clasa de Test ar trebui să testa doar o altă clasă plec de numele clasei din numele metodei. Numele clasei care conține metodele de testare este numit ca clasa de testare în conformitate cu postfix "Teste".
public class SuperCollectionTests(){
// Any test methods that test the class SuperCollection
}
Pentru metode de încercare pentru excepții sau acțiuni care nu sunt posibile, am prefix metoda de testare cu cuvântul nu se Poate.
[ExpectedException(typeOf(ArgumentException))]
public void CannotAddSameObjectAgain() {
// Cannot add the same object again to the collection.
}
Mi denumire convension se baza pe articolul "TDD Sfaturi: Test Convențiile de Denumire & Ghid" de Bryan Gătească. Am gasit acest articol foarte util.
Primul set de nume este mai ușor de citit pentru mine, deoarece CamelCasing separă cuvintele și underbars părți separate schema de numire.
Am, de asemenea, tendința de a include "de Testare" undeva, fie în funcție de numele sau inchiderea de nume sau de clasă.
Atâta timp cât vă urmați o singură practică, aceasta nu't contează cu adevărat. În general, îmi scrie o singură unitate de testare pentru o metodă care acoperă toate variantele pentru o metodă (am metode simple;) și apoi scrie mai complexe seturi de teste pentru metode care necesită aceasta. Mi denumire structură este, prin urmare, de obicei, test (o rămășiță din JUnit 3).
Eu folosesc un 'T' prefix pentru test spații de nume, clase și metode.
Încerc să fiu elegant și de a crea foldere care reproduce spații de nume, apoi a crea un teste dosar sau proiect separat pentru teste și reproduce structura de producție pentru testele de bază:
Objects
AnObj
AProp
Misc
Functions
AFunc
Tests
TObjects
TAnObj
TAnObjsAreEqualUnderCondition
TMisc
TFunctions
TFuncBehavesUnderCondition
Eu pot vedea cu ușurință că ceva este un test, nu stiu exact ce cod original se referă la, (dacă se poate't lucra la asta, atunci testul este prea complicat, oricum).
Se pare ca interfețele convenție de denumire, (adica, nu't obține confuz cu lucruri incepand cu 'I', nici cu 'T').
L's ușor pentru a compila doar cu sau fără teste.
L's teoria e bună oricum, și funcționează destul de bine pentru proiecte mici.