6

Quello che voglio fare è questo:Test unità Visual Studio C# - Esegui test unità con inizializzazioni test multiple/multiple, Esegui stesso test unità più volte?

  1. Creare un gruppo di unit test.
  2. Creare una varietà di diverse combinazioni/permutazioni di inizializzazione di mock, variabili di input, ecc.
  3. Eseguire ciascuna prova unitaria con una contro una serie di tali inizializzazioni basate su alcuni parametri.

Come potrei fare qualcosa del genere?

Esiste già un framework per gestirlo (ad esempio, eseguire un determinato test più volte durante la modifica dell'inizializzazione)? Puoi suggerire qualche disegno o idea con cui potrei fare qualcosa per farlo?

Sono a conoscenza del funzionamento del telaio di prova dell'unità. uso me stesso le merende NUnit e Rhino.

Di seguito è riportato un esempio di ciò di cui ho bisogno.

[Test Initialize] 
Setup(<-possible parameter->) 

[Test Method] 
TestA() 

ora voglio che TestA() venga eseguito più volte. Ogni volta che l'inizializzazione del test sceglierà un'altra combinazione di inizializzazione.

Ulteriori chiarimenti

Consente supporti un test richiederebbe variabili A, B, C. Ciascuno di essi sono oggetti molto complessi con il risultato finale che il gran numero di combinazioni può essere formato. Quindi spero che in qualche modo potrei creare un test di inizializzazione che potrebbe scorrere attraverso un elenco di tali combinazioni, in modo da inizializzarle, eseguire TESTA, tornare alla successiva inizializzazione nell'elenco, eseguire di nuovo TESTA e così via fino a la lista si esaurisce. Quindi seleziona un'altra lista per TESTB e di nuovo segue questa procedura.

Almeno spero di poter essere in grado di eseguire una determinata funzione TEST n volte. Il resto so che posso costruire una volta che questo è possibile

+5

Ci sono molte strutture disponibili ...per favore fai qualche ricerca prima di fare una domanda – emartel

+2

Hai capito cosa sto chiedendo? So che ci sono un sacco di framework, ne uso due o tre, quello che mi serve è che un determinato test di unità venga eseguito ripetutamente mentre la funzione di inizializzazione varia. –

risposta

3

Potrebbe essere possibile farlo senza bisogno di alcun addon specifico per la struttura creando una classe base astratta che contenga tutte le funzioni di test, quindi ereditando quella classe base con più classi , ognuno con la propria funzione di configurazione.

 
public abstract class MyTests 
{ 
    [Test] 
    public void TestOne() 
    { 
     ... 
    } 

    [Test] 
    public void TestTwo() 
    { 
     ... 
    } 
} 
 
[TestFixture] 
public class FirstSetup : MyTests 
{ 
    [Setup] 
    public void Setup() 
    { 
     ... 
    } 
} 

[TestFixture] 
public class SecondSetup : MyTests 
{ 
    [Setup] 
    public void Setup() 
    { 
     ... 
    } 
} 

ho fatto in altre lingue, ma non è sicuro come i vari C# quadri saranno gestirlo.

+0

Umm il numero di combinazioni nel test di inizializzazione mi impedirebbe di usare questo approccio, possono essere letteralmente esponenziali o il modo in cui spero di essere prelevato da un elenco di possibili inizializzazioni .. I ' m –

+0

Allora sì, questo metodo probabilmente non funzionerebbe per te. –

+0

D'altra parte ho dovuto eseguire gli stessi test per 3 diverse configurazioni (3 diversi serializzatori) ed era esattamente quello di cui avevo bisogno. Grazie! –

7

In NUnit è possibile utilizzare l'attributo [TestCase] ​​per i tipi semplici:

[Test] 
[TestCase("a", "b")] 
[TestCase("c", "b")] 
[TestCase("a", "d")] 
public void TestMethod(string param1, string param2){ 
    // run your test with those parameters 
} 

Oppure si può utilizzare un metodo TestCaseSource per i tipi complessi:

[Test] 
[TestCaseSource("GetTestCases")] 
public void TestMethod(MyObject1 param1, MyObject2 param2){ 
    // run your test with those parameters 
} 

private IEnumerable GetTestCases(){ 
    yield return new TestCaseData(new MyObject1("first test args"), 
            new MyObject2("first test args")) 
         .SetName("SomeMeaningfulNameForThisTestCase"); 
    yield return new TestCaseData(new MyObject1("2nd test args"), 
            new MyObject2("2nd test args")) 
         .SetName("SomeMeaningfulNameForThisTestCase2"); 

} 

È possibile fare qualcosa di simile in MS -Test using a DataSource: http://codeclimber.net.nz/archive/2008/01/18/How-to-simulate-RowTest-with-MS-Test.aspx

+0

Ora sembra molto promettente, lo proverò :) –