2012-12-21 7 views
10

La domanda generale è ci sono schemi alternativi a AAA per il test dell'unità? Se, sì, sarebbe molto interessante vedere alcuni esempi e sentire i loro pro e contro.Arrange Act Assert Alternatives

E come l'esempio più semplice di prova AAA (in C#, utilizzando var per semplicità):

// Arranging 
var annualSalary = 120000M; 
var period = 3; // for a quarter profit 
var calc = new SalaryCalculator(); 

// Acting 
var result = calc.CalculateProfit(annualSalary, period); 

// Assertion 
Assert.IsEqual(40000, result); 

risposta

4

C'è un'altra notazione da Comportamento-driven sviluppo: Dato - Quando - Quindi. Esempi per C# è SpecFlow e per Jasmin per JavaScript. Entrambe le risorse sono piene di esempi di utilizzo di questa notazione. L'approccio GWT viene in genere utilizzato in uno sviluppo orientato al comportamento e alla programmazione orientata agli aspetti.

+3

Ho appena controllato una cosa poco su Internet e sembra davvero come il Data-Quando-Poi è lo stesso Disporre-Act-Assert (per esempio [questo] (http://hadihariri.com/2012/04/11/what-bdd-has-taught-me/)).Semanticamente e logicamente sembrano abbastanza simili. Ma l'implementazione differisce esponendo un modo attributivo di test completamente esplicito. Bello :) –

9

Mi piace qualcosa che non sia tanto un'alternativa all'AAA, ma piuttosto una variazione. Lo considero come Arrange-Assert (not) -Act-Assert, ma altri lo hanno chiamato Asserzione di guardia. L'idea è di avere un'affermazione che assicuri che il risultato desiderato dell'Atto non sia già presente prima dell'atto. C'è una buona discussione su di esso here.

+0

Posso vedere questa tecnica non è ampiamente utilizzata. L'hai mai messo in pratica in uno dei tuoi progetti di produzione nel mondo reale? –

+0

L'ho usato, ma non in modo particolarmente disciplinato. Solo a volte, quando voglio essere sicuro che l'azione sotto esame è ciò che determina la condizione, a volte scriverò i miei test in questo modo. Non come una politica regolare. –

+0

È un'idea interessante; A volte lo uso "informalmente" quando ritengo sia importante chiarire quali sono le precondizioni del test. – Mathias

1

quando si utilizzano test parametrizzati, quindi spesso è possibile spostare la parte "arranging" o "given" in parametri. ma ancora, il principio rimane

4

Alcuni dei primi framework di derisione (almeno nel mondo .Net) ti hanno costretto a usare il modello Record/Replay. Dico forza perché non la trovo molto naturale o leggibile e non c'era alternativa allora.

Questo ha generato una nuova razza di strutture di isolamento che promuovono il modulo AAA, che trovo essere l'approccio più intento-rivelatore. Ulteriori informazioni su questo here.

+0

Bella istantanea dalla storia. Sto lavorando sulla piattaforma .net fin dalla prima versione e non riesco a ricordare se ho fatto uso di uno di quei vecchi schemi di beffeggiamento quel giorno. Nessuno dei miei membri del team ha mai lavorato. –

0

Un altro modello comune utilizzato in unit testing è quattro fasi del modello di prova:

  1. Setup
  2. Esegui
  3. check
  4. Teardown

I primi passi sono essenzialmente le come nel modello AAA. Tuttavia, trovo che il pattern a quattro fasi sia più adatto alle lingue in cui è necessario pulire da soli, ad esempio C o C++. Il passaggio 4 (teardown) consente di liberare qualsiasi memoria allocata o distruggere gli oggetti creati per il test.

Nelle situazioni in cui non si alloca memoria o un garbage collector si occupa della deallocazione, il quarto passaggio rimane inutilizzato per la maggior parte del tempo, quindi ha più senso utilizzare il pattern AAA.

In C++, ad esempio, la prova di cui sopra potrebbe essere:

// Setup 
int annualSalary = 120000; 
int period = 3; // for a quarter profit 
int result; 
SalaryCalculator calc = new SalaryCalculator(); 

// Execute 
result = calc.CalculateProfit(annualSalary, period); 

// Check 
CHECK_EQUAL(40000, result); 

// Teardown 
delete calc; 
+0

Potresti chiamarlo Arrange-Act-Assert-Absterge :) L'Absterge era l'unico sinonimo di pulizia iniziato con un a che potevo trovare. Forse potresti fare una discussione a favore di disAssemble, ma questo è solo barare direi: p – Sammi