2012-03-07 4 views
1

'ici est sortie ...'OpenCover montrant 0 lignes couvert de MSTest

Loading C:\TEMP\BankDemo_mstest\Test_BankDemo\bin\Debug\Test_BankDemo.dll... 
Starting execution... 

Results    Top Level Tests 
-------    --------------- 
Error     Test.BankDemo.AccountTest.CreditTest 
Error     Test.BankDemo.AccountTest.DebitTest 
Error     Test.BankDemo.AccountTest.FreezeTest 
0/3 test(s) Passed, 3 Error 

Summary 
------- 
Test Run Error. 
    Error 3 
    -------- 
    Total 3 

est la commande je

OpenCover\OpenCover.Console.exe -register:user 
-output:"Codecoverage.xml" 
-mergebyhash 
-target:"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe" 
targetargs:"/testcontainer: 
"C:\TEMP\BankDemo_mstest\Test_BankDemo\bin\Debug\Test_BankDemo.dll" 
/noisolation" 
-filter:"-[Bank.*]* +[Bank*]* +[Bank.Accounts*]* -[Test.BankDemo*]*" 

ReportGenerator\bin\ReportGenerator.exe Codecoverage.xml Coverage HTML 

(je l'ai même essayé regsvr32 pour vous inscrire le profil et j'utilise XP)
réellement je suis débutant à Nunit, mstest et opencoverage et j'ai trouvé l'échantillon Unit t cas à http://www.nunit.org/index.php?p=quickStart&r=2.4 si
** classe de test Nunit est comme ci-dessous **

private TestContext testContextInstance; 
public TestContext TestContext 
{ 
    get { return testContextInstance; } 
    set { testContextInstance = value; } 
} 
private int store; 
[TestInitialize()] 
public void TestFixtureSetUp() 
{ 
    store = 1; 
} 

la classe ci-dessus fonctionne très bien avec Nunit et Opencoverage montrant également des données précises, mais même classe après avoir remplacé les attributs spécifiques MSTest n'a pas travaillé si après avoir posté ce questin je me suis dit que cette méthode devait être statique et ajouté l'argument TestContext. donc j'ai fait des changements de code (en gras) comme ci-dessous et au-dessus de la commande a bien fonctionné.

MSTest classe

private TestContext testContextInstance; 
public TestContext TestContext 
{ 
    get { return testContextInstance; } 
    set { testContextInstance = value; } 
} 
[ClassInitialize()] 
public **static** void ClassInit(**TestContext context**) 
{ 
} 

Répondre

1

Vos tests ne sont pas désagrègent - ils erroring, ce qui signifie qu'il semble y avoir un problème de compilation du projet de test. Il va de soi que vous n'obtiendrez aucune couverture si les tests ne peuvent être construits et exécutés.

1

2 raisons pourraient être pour cela mais je soupçonne que vos filtres ont tort, comme décrit dans le usage les filtres sont

(+/-)[assembly/module filter]namespace.typefilter 

et les filtres d'exclusion ont la priorité sur les filtres d'inclusion

Ainsi, votre -[Bank.*]* exclut types avant le +[Bank.Accounts*]* (et probablement +[Bank*]*) peuvent prendre effet. Comme le filtre par défaut +[*]* est ajoutée uniquement si vous avez pas d'autres filtres supplémentaires, autres que celles par défaut, alors vous ne devriez avoir besoin d'ajouter des filtres pour les modules que vous souhaitez le profil-à-dire +[Bank.*]*

Si vous ouvrez la sortie XML alors, si une classe est filtrée, une raison est fournie via l'attribut skippedDueTo. L'autre raison peut être due à des fichiers PDB manquants ne se trouvant pas dans le dossier de l'assembly (certains tests copient des assemblys vers d'autres dossiers - mais je vois que vous utilisez le commutateur/noisolation - cela ne devrait pas être le cas)

S'il vous plaît ne hésitez pas à discuter ou si vous pensez qu'il ya une grosse relance la question sur les OpenCover GitHub site

+0

Merci pour la réponse, il est le problème avec la classe MSTest – sureshp

+0

peut-être, mais même si vos tests ne courez pas , vous obtiendrez une couverture en raison de la mise en place du test et du démontage et vos filtres semblent toujours faux :) –

Questions connexes