2012-04-05 17 views
7

ho una classe di test come segue:Non tutti i test vengono eseguiti in parametrizzati NUnit TestFixture contenenti le matrici

[TestFixture("someurl1", new[] { "param1", "param2" }, 15)] 
[TestFixture("someurl2", new[] { "param3" }, 15)] 
public class my_test 
{ 
    public my_test(string url, string[] fields, int someVal) 
    { 
     // test setup 
    } 
} 

Durante l'esecuzione di questo test in ReSharper 6.1 e NUnit 2.5.10, il test non è eseguito due volte, come atteso, funziona solo una volta. Nei risultati del test vedo elencato

my_test("someurl1", System.String[], 15) 

Questo mi fa pensare che i due apparecchi sono trattati come lo stesso, e che NUnit non sta differenziando tra le matrici di stringhe nelle due prove.

Come soluzione alternativa, ho aggiunto un parametro dummy nel costruttore. Se si imposta questo valore su un valore diverso per ciascuna apparecchiatura, vengono eseguiti tutti i test.

Non è possibile disporre di TestFixtures con array contenenti valori diversi? Ho appena aggiornato da ReSharper 5, quindi mi chiedo se è correlato. Ho letto su alcuni problemi con test parametrizzati in 6.x.

+0

Funziona nel corridore NUnit? – Scroog1

+0

Inoltre, grazie per aver sottolineato che è possibile disporre di dispositivi di prova parametrizzati, poiché non sapevo che ciò fosse possibile. – Scroog1

+1

Appena provato nel corridore NUnit e che esegue tutti i test con successo. Penso che potrebbe essere correlato all'aggiornamento di ReSharper. –

risposta

0

Penso che questo sia correlato alla new-up di un array nel costruttore di TestFixture, ho letto da qualche parte che non è possibile farlo.

0

Hai provato a creare test individuali sotto di esso come un TestFixture generico ??? Qualcosa di simile

[TestFixture] 
public class my_test 
{ 
    private bool my_test(string url, string[] fields, int someVal) 
    { 
     // test setup 
     return DidTestCompleteOk; 
    } 

    [Test] 
    public void TestURL1() 
    { 
     Assert.IsTrue(my_test("someurl1", new[] { "param1", "param2" }, 15)); 
    } 

    [Test] 
    public void TestURL2() 
    { 
     Assert.IsTrue(my_test("someurl2", new[] { "param3" }, 15)); 
    } 
} 
4
[TestFixture("someurl1", "param1|param2", 15)] 
[TestFixture("someurl2", "param3", 15)] 
public class my_test 
{ 
    private string[] _fields; 

    public my_test(string url, string fieldList, int someVal) 
    { 
     _fields = fieldList.Split('|'); 
     // test setup 
    } 

    [Test] 
    public void listFields() 
    { 
     foreach (var field in _fields) 
     { 
      Console.WriteLine(field); 
     } 
    } 
} 
0

Si scopre questo è il messaggio di errore assoluto se qualcosa va storto nel costruttore di un dispositivo di prova con parametri. Non ottieni le informazioni sulle eccezioni effettive restituite come quando qualcosa non funziona in altro codice.

Quindi probabilmente dovresti spostare il codice di configurazione su [SetUp] o [TestFixtureSetUp] o assicurarti che il costruttore sia in esecuzione senza errori. Ma in realtà dovresti fare il primo suggerimento, e solo salvare i parametri della fix test nel costruttore e fare qualcosa con loro in un altro metodo.

Problemi correlati