2010-06-25 4 views
7

devo scrivere i seguenti casi di test di unità in TestNG:Passando output di un metodo di prova per un altro metodo TestNG

  1. saveProductTest che sarebbe tornato productId se i dettagli del prodotto sono salvati con successo nel DB.

  2. modifyProductTest, deve utilizzare un ID prodotto precedentemente salvato come parametro.

sto prendendo l'input dettagli del prodotto (PrdouctName, ReleaseDate) per il metodo di saveProductTest e modifyProductTest da un file XML utilizzando i dati TestNG providers.Since productId è generato nel metodo di salvataggio, devo passare al metodo di modificare .

Qual è il modo migliore per passare l'output di un metodo di test a un altro metodo in testng.

+0

Generalmente per unit testing, si vuole prendere in giro tutto ciò che non fa parte del test di unità corrente. – Amber

risposta

12

Con tutto il rispetto per simendsjo, il fatto che tutti i test dovrebbero essere indipendenti l'uno dall'altro è un approccio dogmatico che ha molte eccezioni.

Torna alla domanda originale: 1) utilizzare metodi dipendenti e 2) memorizzare il risultato intermedio in un campo (TestNG non ricrea le proprie istanze da zero, in modo che il campo mantenga il proprio valore).

Ad esempio

private int mResult; 

@Test 
public void f1() { 
    mResult = ... 
} 

@Test(dependsOnMethods = "f1") 
public void f2() { 
    // use mResult 
} 
+0

Si noti che se si utilizza Eclipse con il plug-in TestNG, quando si esegue il metodo di prova f2 "solo" (Fare clic con il tasto destro del mouse su Metodo> Esegui come > TestNG Test), Eclipse eseguirà automaticamente prima f1 e poi f2. –

3

Ogni test dell'unità deve essere indipendente da altri test in modo da poter vedere più facilmente ciò che non riesce. Puoi avere un metodo di supporto per salvare il prodotto e restituire l'id e chiamarlo da entrambi i test.

+0

Cosa succede se la gestione delle transazioni viene eseguita a livello di test, quindi le asserzioni dovranno essere spostate su un metodo diverso –

4

Con l'oggetto ITestContext. È un oggetto disponibile globalmente nel contesto della Suite e disponibile tramite parametro in ogni @Test.

Ad esempio:

@Test 
public void test1(ITestContext context, Method method) throws Exception { 
    // ... 
    context.setAttribute(Constantes.LISTA_PEDIDOS, listPaisPedidos); 
    // ... 
} 

@Test 
public void test2(ITestContext context, Method method) throws Exception { 
    List<PaisPedido> listPaisPedido = (List<PaisPedido>) 
    context.getAttribute(Constantes.LISTA_PEDIDOS); 
    // ... 
}