OpenCover показывает 0 строк, покрытых mstest - PullRequest
1 голос
/ 07 марта 2012

'здесь выводится ...'

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

Это команда, которую я использовал

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

(я даже пытался regsvr32 зарегистрировать профиль, и я использую XP)
На самом деле, я новичок в Nunit, mstest и opencoverage, и я нашел пример тестового модуля в http://www.nunit.org/index.php?p=quickStart&r=2.4, поэтому
** Класс испытаний Nunit, как показано ниже **

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

вышеупомянутый класс отлично работает с Nunit и Opencoverage, также показывающими точные данные, но тот же класс после замены специфических атрибутов mstest не сработал, поэтому после публикации этого квеста я решил, что этот метод должен быть статическим, и добавил аргумент TestContext. поэтому я внес изменения в код ( жирным шрифтом ), как показано ниже и выше, команда работала нормально.

MSTest класс

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

Ответы [ 2 ]

1 голос
/ 08 марта 2012

2 причины могут быть для этого, однако я подозреваю, что ваши фильтры неверны, как описано в использование фильтры

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

и фильтры исключения имеют приоритет над фильтрами включения

Таким образом, ваш -[Bank.*]* исключает типы, прежде чем +[Bank.Accounts*]* (и, вероятно, +[Bank*]*) может вступить в силу. Поскольку фильтр по умолчанию +[*]* добавляется только в том случае, если у вас нет других дополнительных фильтров, кроме фильтров по умолчанию, вам нужно будет только добавить фильтры для модулей, которые вы хотите профилировать, т.е. +[Bank.*]*

Если вы открываете вывод XML, то, если класс отфильтрован, то причина указывается через атрибут skippedDueTo.

Другая причина может быть из-за отсутствия файлов PDB, отсутствующих в папке сборки (некоторые тестовые наборы копируют сборки в другие папки - но я вижу, что вы используете переключатель / noisolation - так не должно быть)

Пожалуйста, не стесняйтесь обсуждать или, если вы считаете, что существует серьезная проблема на сайте OpenCover GitHub

1 голос
/ 08 марта 2012

Ваши тесты не дают ошибок - они дают ошибки, что означает, что, похоже, возникла проблема при компиляции тестового проекта.Разумеется, вы не получите никакого покрытия, если тесты не могут быть построены и выполнены.

...