2013-04-10 19 views
13

Ho visto in un video Microsoft su Visual Studio aggiornamento 2 riguardante questi attributi. Tuttavia, non riesco a trovare altre informazioni su di loro e non riesco a ottenere un progetto da costruire con loro.Attributi DataTestMethod e DataRow in MSTEST

Qualcuno sa qualcosa su di loro o su come farli funzionare?

Grazie.

[DataTestMethod] 
[DataRow("a", "b")] 
[DataRow(" ", "a")] 
public void TestMathos1(string value1, string value2) 
{ 
    Assert.AreEqual(value1 + value2, string.Concat(value1, value2)); 
} 
+1

Verificare quanto segue: [Come eseguire un metodo di prova con più parametri in MSTest?] (Http://stackoverflow.com/questions/9021881/how-to-run-a-test-method-with-multiple-parameters -in-mstest # 13.710.788). – Schaliasos

+0

Grazie mille. Qualche indizio sul perché il suo uso sia così limitato? –

+0

Davvero non lo so. Ma puoi aggiungerlo in [UserVoice] (http://visualstudio.uservoice.com/forums/121579-visual-studio/category/31481-net) :) – Schaliasos

risposta

8

Risulta questo è disponibile solo all'interno del progetto di test di unità per WinRT/Metro e ora con l'aggiornamento 2, Windows Phone 8. E 'un mistero per il mio motivo per cui questo non è disponibile per tutti i test con mstest.

+1

Bene è ora - o almeno sarà nella prossima versione di MSTest https://blogs.msdn.microsoft.com/visualstudioalm/2016/06/17/taking-the-mstest-framework-forward-with-mstest-v2/ –

+1

È ora disponibile come pacchetto NuGet https: //blogs.msdn.microsoft.com/visualstudioalm/2016/06/17/taking-the-mstest-framework-forward-with-mstest-v2/ – ironstone13

6

Infine, è stato aggiunto questa funzione (ancora in pre-release) https://blogs.msdn.microsoft.com/visualstudioalm/2016/06/17/taking-the-mstest-framework-forward-with-mstest-v2/

In sostanza, si deve fare due cose:

1) Installare due pacchetti Nuget (versioni in realtà non la materia, ma questo è quello che ho)

<package id="MSTest.TestAdapter" version="1.1.5-preview" targetFramework="net452" /> 
    <package id="MSTest.TestFramework" version="1.0.6-preview" targetFramework="net452" /> 

2) Rimuovere la refenrece alla vecchia libreria di test, perché ha gli stessi attributi definiti negli stessi spazi dei nomi - questo è stato fatto per ottenere indietro reparti di compatibilità

Microsoft.VisualStudio.QualityTools.UnitTestFramework 
+1

Ben scritto. Con il tempo di esecuzione gratis; facile registrazione dell'output e ora funzionalità come 'DataTestMethod' MSTest-v2 è un framework di test unitario competitivo. – Aaron

10

So che questa è una vecchia questione, ma ora c'è una buona procedura dettagliata pubblicata a https://blogs.msmvps.com/bsonnino/2017/03/18/parametrized-tests-with-ms-test/

In poche parole, sarà necessario installare MSTest.TestFramework e MSTest.TestAdapter, e rimuovere i riferimenti a Microsoft.VisualStudio.QualityTools.UnitTestFramework. È quindi possibile indicare un test parametrizzato con l'attributo [DataTestMethod] e aggiungere i parametri utilizzando l'attributo [DataRow], come da esempio. I valori dell'attributo [DataRow] verranno passati al metodo di prova nell'ordine in cui sono specificati.

Si noti che i valori nell'attributo [DataRow] devono essere primitivi, quindi non è possibile utilizzare un DateTime o decimal ad esempio. Se le vuoi, dovrai aggirare questa limitazione (ad esempio, invece di avere un parametro DateTime per rappresentare una data, potresti avere tre parametri interi che rappresentano anno, mese e giorno e creare lo DateTime all'interno del corpo del test).

+1

Grazie mille per la risposta Tim. Se qualcuno è assolutamente legato a MSTest per qualche motivo, questa è un'ottima notizia. In caso contrario, consiglio vivamente di passare a NUnit, XUnit, ecc. Microsoft semplicemente non prende sul serio il testing o il TDD.Abbiamo cambiato un progetto molto ampio passando da MSTest a NUnit con pochissimo lavoro che ha aperto le porte a un framework di test molto più completo che viene attivamente sviluppato. Ci sono voluti 4 anni perché Microsoft fornisse questa semplice funzionalità che parla in termini di volume. –

+1

Il passaggio di singoli test 'int' per' DateTime' è utile. Nel mio caso testare varie ore 2, 3, 4. – SushiGuy