問題タブ [opencover]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - OpenCover が空のレポートを生成する
OpenCoverを使用して、単純な C# プロジェクトのコード カバレッジを判断しています。
問題
MSTest が単体テストを実行している (そして成功している) ことはわかりますが、生成されたレポートは空です。
詳細
これは私が使用しているコマンドです:
出力
生成されたレポートの内容:
環境
コードは Windows 7 64 ビットで実行されていますが、32 ビットの Visual Studio コマンド プロンプト環境で実行されます。
EDIT単体テストのデバッグ ビルドを含むディレクトリでコマンドを実行しており、OpenCover ディレクトリを環境パスに追加しました。
私が試したこと
PartCover で同様の問題を検索しましたが (OpenCover は一種のブランチのように見えるため)、問題に一致するものを見つけることができず、解決策を示しました。
編集私はより広いフィルターでもテストしました-filter:+[*]*
が、これは出力をまったく変更しませんでした。
編集ここで述べたように、MSTest/noisolation
引数でもテストしました。まだ結果が出ていません。
編集フィルターを完全に削除し、デフォルトのフィルターに戻すこともテストしました。結果がありません。
typemock-isolator - Can Opencover be used with TypeMock Isolator?
I'm looking for a .NET coverage tool, and had been trying out PartCover, with mixed success. I see that OpenCover is intended to replace PartCover, but I've so far been unable to link it with TypeMock Isolator so my mocked-out tests pass while gathering coverage info.
I tried replicating my setup for Partcover, but there's no defined profilename that works with the "link" argument for Isolator. Thinking that OpenCover was based on Partcover, I tried to tell Isolator to link with Partcover, and it didn't complain (I still had Partcover installed), but the linking didn't work - Isolator thought it wasn't present.
Am I missing a step? Is there a workaround? Or must I wait for an Isolator version that is friends with OpenCover?
code-coverage - カバーを開くと、カバレッジの詳細に関する出力が生成されない
以下のように開いたカバーを実行しようとしています
opencover.console.exe -target:"C:\Users\rkapiset\Downloads\xunit-1.8\xunit.console.clr4.x86.exe" -targetargs:"""E:\Office\CRM\dotnet\1 - UI \EYC.CRM.UI.Tests\bin\Debug\EYC.CRM.UI.Tests.dll""" -filter:+[EYC]* -output:coverage.xml
以下は結果です
合計 61、失敗 3、スキップ 0、1.674 秒
訪問したクラス 0 の 0 (NaN)
訪問したメソッド 0 の 0 (NaN)
訪問したポイント 0 の 0 (NaN)
未訪問のクラス 未訪問の
メソッド
私が間違っているヒントはありますか?前もって感謝します。
code-coverage - OpenCover ツールにフィルターを追加して、名前空間内の一部のクラスをスキップする方法
名前空間/アセンブリ内の一部のクラスをスキップするフィルターを追加するにはどうすればよいですか。例:SYM.UI
はベース アセンブリで、スキップしたいSYM.UI.ViewModels
. 以下のフィルターを書いていますが、それらすべてが含まれており、私の要求を満たしていません:
これを修正するのを手伝ってください。
msbuild - OpenCover MSBuild 統合 - 結果が生成されない
自分のマシンで OpenCover を動作させたら、次のステップはそれをビルド サーバーで動作させることです。
OpenCover を Bamboo Build Server 上の MSBuild と統合しようとしています。ソリューションのビルド後に OpenCover を実行するように Build.proj を次のように変更しました。
"Coverage" ディレクトリは、ソリューション ルート ディレクトリ (ビルド中の作業ディレクトリ) に作成されます。テストが実行され、すべて合格しCommitting....
ますが、ビルド ログ (コマンド ラインに表示されるもの) に表示された後、結果は生成されず、ビルドは次のタスク (ReportGenerator を使用してレポートを作成する) に進みます。これは次のように失敗します。 CodeCoverageResults.xml は作成されませんでした)。
ビルド マシンのコマンド ラインで同じコマンドを実行すると、すべてが期待どおりに機能し、ReportGenerator によってレポートを生成できます。
他の誰かが同じ問題を抱えていましたか?このPartCover の例のように、同等の dll を登録する必要がありますか?
c# - Molesを使用したテストのコードカバレッジ情報はありません
私は過去数日間OpenCoverに慣れてきましたが、Molesを使用したテストではカバレッジ情報が生成されないことに気付きました。
[HostType("Moles")]
問題を切り分けるための小さなソリューションを作成しましたが、コードカバレッジは属性を持たないテストに対してのみ生成されることがわかりました。
周りを読んで、これとこれが私の問題のNCoverに相当するように見えることを発見しました。彼らは、それはプロファイラーとカバレッジツールを実行しているMolesと関係CLRMONITOR_EXTERNAL_PROFILERS
があり、Molesと同時に複数のプロファイラーを実行できるように設定できる環境変数があると言います-これはここにあると思います解決策はありますが、100%確信はありません。変数の値はOpenCoverプロファイラーの名前になると思います-誰かがこの名前を知っていますか?
誰かがOpenCoverをMolesで実行することに成功しましたか?できますか?
c# - x64 WindowsServer2003でのMolesテストの対象外
何らかの理由で、OpenCoverはWindows Server 2003(64ビット)でのほくろを使用したテストをカバーしていません。私は32ビットのWindows7マシンでそれを解決する同様の質問を提起しましたが、何らかの理由でWindowsServerマシンで環境変数を設定しても違いはありません。
x64プロファイラーに別のCLSIDはありますか?それとも、これは別の問題でしょうか?
再現する手順
次の3つの方法を使用して、VisualStudioで新しいプロジェクトを作成します。
次に、次のようなテストプロジェクトを作成します。
上記をコンパイルするには、ConsoleApplication2リファレンスを右クリックして[モルアセンブリの追加]を選択し、[モルアセンブリの追加]を行う必要があります。
次のコマンドでOpenCoverを実行します。
同等の64ビットマシン:
results.xmlファイルでReportGeneratorを実行します。
推測される結果
成功した場合(私の32ビットWindows 7マシンのように)、レポートにはmethod3がカバーされている(method2Testで呼び出されます)と表示され、次のようになります。
ただし、64ビットWindows Serverで実行すると、結果は次のようになります。
どちらの場合も、すべてのテストに合格しますが、64ビットWindowsServerでMolesを使用したテストのカバレッジ情報は取得されていません。
これにより、問題がより明確に説明されることを願っています。さらに情報が必要な場合はお知らせください。
ありがとう、ジャック
.net - opencover が指定された出力ファイルに書き込めないのはなぜですか?
Admin Console から次のコマンド ライン (わかりやすくするために折り返されています) を使用して OpenCover を実行しています。
packages\OpenCover.1.0.625\OpenCover.Console.exe -register:user -target:packages\NUnit.2.5.10.11092\tools\nunit-console.exe -targetargs:"FooProject.nunit" -filter:+[ ] -出力:coverage.xml
以下の出力が得られますが、指定されたcoverage.xmlファイルが作成されていません。
出力ファイルが作成されないのはなぜですか?
更新この質問への回答
で提案されているように、32ビットと64ビットの両方のプロファイラーを登録し、フラグを削除しましたが、それでも同じ出力が得られます-register
NUnit バージョン 2.5.10.11092
Copyright (C) 2002-2009 Charlie Poole.
Copyright (C) 2002-2004 James W. Newkirk、Michael C. Two、Alexei A. Vorontsov.
Copyright (C) 2000-2002 Philip Craig.
全著作権所有。ランタイム環境 -
OS バージョン: Microsoft Windows NT 6.1.7601 Service Pack 1
CLR バージョン: 2.0.50727.5446 (Net 2.0)ProcessModel: デフォルト DomainUsage: デフォルト
実行ランタイム: デフォルト
..........F....FF........F... .........F..F..F......
テストの実行: 58、エラー: 0、失敗: 7、不確定: 0、時間: 1.5298027 秒
実行しない: 0、無効: 0、無視: 0、スキップ: 0エラーと失敗:
1) テストの失敗:
C:\FooProject\FooProject.Tests\Controllers\BarControllerTests.cs:line 27 の FooProject.Tests.Controllers.BarControllerTests.Index() の FooProject.Tests.Controllers.BarControllerTests.Index2) テストの失敗:
C:\FooProject\FooProject.Tests\Controllers\FringControllerTests.cs:line 107 の FooProject.Tests.Controllers.FringControllerTests.Index() の FooProject.Tests.Controllers.FringControllerTests.Index3) テストの失敗: FooProject.Tests.Controllers.FringControllerTests.Save
at FooProject.Tests.Controllers.FringControllerTests.Save() in C:\FooProject\FooProject.Tests\Controllers\FringControllerTests.cs:line 1354) テストの失敗:
C:\FooProject\FooProject.Tests\Repositories\FringRepositoryTests.cs:line 17 の FooProject.Tests.Repositories.FringRepositoryTests.Foo() の FooProject.Tests.Repositories.FringRepositoryTests.Foo5) テストの失敗:
C:\FooProject\FooProject.Tests\Services\BarServiceTests.cs:line 52 の FooProject.Tests.Services.BarServiceTests.Frob() の FooProject.Tests.Services.BarServiceTests.Frob6) テストの失敗: FooProject.Tests.Services.FringServiceTests.Frob
at FooProject.Tests.Services.FringServiceTests.Frob() in C:\FooProject\FooProject.Tests\Services\FringServiceTests.cs:line 397) テストの失敗: FooProject.Tests.Services.FringServiceTests.Frob at FooProject.Tests.Services.FringServiceTests.Frob() in C:\FooProject\FooProject.Tests\Services\FringServiceTests.cs:line 139
コミットしています....
c# - SecurityTransparent 属性を持つアセンブリにより、プロファイラーを介してインストルメント化されたコードが VerificationException をスローするのはなぜですか?
OpenCoverを使用してアセンブリをインストルメント化すると、SecurityTransparent属性 (および AllowPartiallyTrustedCallers のように見える) を持つアセンブリが VerificationException をスローするようです。その理由と、MVC3 のダウンロードされたコードに見られるように、条件付きコンパイルなど、これらの属性を含めずにアセンブリを再コンパイルする別の解決策があるかどうかを知りたいのですが (奇妙なことに、 codeplex のリポジトリ)。これらのアセンブリ属性がなくても、カバレッジは問題なく実行されることに注意してください。
OpenCover は、CALLI命令を使用して、計測データ (シーケンス ポイント識別子) をプロファイラーに送信します。この命令を呼び出すと、例外が発生するようです。インストルメンテーション部分は問題ないようで、JIT はインストルメント化された新しいメソッドを問題なくコンパイルします。Tiny メソッドの Fat と小さなブランチを長くする以外のすべてのインストルメンテーションを削除すると、コードは問題なく実行されるため、インストルメンテーションの行為は問題を引き起こしません。
現在、Mono.Cecil を使用して「include-in-coverage」フィルターを通過するアセンブリを調べ、インストルメンテーションをスキップしてユーザーに問題を報告してから続行していますが、できることがあるかどうか知りたいです。この問題を回避し、再コンパイルを避けるために、プロファイリング中に実行してください。
2つの質問を要約すると、「なぜそれが起こるのか?」および「再コンパイルせずに回避できますか?」
注: PartCover にもこの問題が見られるようで、別の方法を使用して訪問ポイントを記録します。
注: 私は OpenCover (オープン ソース コード カバレッジ ツール) の開発者であり、現在は PartCover のメンテナーです。
c++ - スレッドセーフなキューは良いアプローチですか?
私が開発しているオープン ソース プロジェクト用に次のコードを最適化する方法、または重い作業を別のスレッドに移動してパフォーマンスを向上させる方法を探しています。
上記のコードは、各訪問ポイントが呼び出されるときに、OpenCoverプロファイラー (C++ で記述された .NET 用のオープン ソース コード カバレッジ ツール) によって使用されます。ミューテックスは、一部の共有メモリ (32/64 ビットおよび C++/C# の複数のプロセス間で共有される 64K ブロック) を保護するために使用されます。明らかに、これは各計装ポイントにとってかなり重いので、影響を軽くしたいと考えています。
上記の方法でプッシュされるキューと、スレッドを使用してデータをポップし、共有メモリを作成することを考えています。
Q. 私が使用できる C++ (Windows STL) のスレッド セーフ キューはありますか? または、ある問題を別の問題に置き換えたくないので、ロックレス キューはありますか? 人々は私のアプローチを賢明だと考えていますか?
編集 1: インクルード フォルダーに concurrent_queue.h が見つかりました - これが私の答えでしょうか?