4

カスタム fxrules をテストしたいと思います。

この投稿を見ました: http://weblogs.asp.net/rosherove/archive/2007/02/24/writing-real-unit-tests-for-your-custom-fxcop-rules.aspx

しかし、fxcop の最新バージョンでは動作しません。Microsoft.Cci.Method.GetMethod が存在せず、代替手段が見つかりません。

Microsoft.FxCop.Sdk.Method オブジェクトを取得する方法を知っていますか?

助けてくれてありがとう。よろしくお願いします、

4

4 に答える 4

6

カスタム ルールを記述するために使用される API は、単体テストに必要な API とほぼ同じくらい十分に文書化され、サポートされていることを考えると、1.36 (CLR2 の場合) と 10.0 (CLR4 の場合) の間で同じままであることに注意してください。オブジェクトを取得するプロセスの概要。FxCop アセンブリでMicrosoft.FxCop.Sdk.Method宣言された型とメソッドのみを使用して実行できます(リフレクションのトリックは必要ありません)。public

Typeが必要なオブジェクトの から始めて、これをMicrosoft.FxCop.Sdk.Method呼び出しますt。静的エントリポイントを介してAssemblyNode含まれているアセンブリの を取得しますt

assembly = AssemblyNode.GetAssembly(t.Module.Assembly.Location)

viaTypeNodeに対応するFxCop を取得するt

assembly.GetType(Identifier.For(t.Namespace), Identifier.For(t.Name))

次に、TypeNodeMembersフィールドを検索して、member.Name.Name探していたメソッドの名前が にあるフィールドを見つけます。これが単体テストであることを考えると、検査対象のダミー メソッドがオーバーロードされないように調整できるはずです。

次に、呼び出しMyRule.Check(member)てテストを実行します。これはオブジェクトのコレクションを返しますProblem。これを調べて、期待される結果と期待される結果のみが含まれていることを確認できます。

于 2012-01-21T23:53:57.017 に答える
1

FxCop からのリフレクション ブリッジの削除は、かなり前に発表されました。また、文書化されておらず、サポートされていない API の使用は、FxCopUnit で使用されるアプローチの問題だけではありません。FxCopUnit では、誤検知のスクリーニングが実装されていません。欠落している違反と予期しない違反の両方をスクリーニングするために、FxCop 出力レポートを使用するテスト アプローチへの切り替えを検討することをお勧めします。

于 2009-11-17T12:55:28.857 に答える
1

おそらく、 Gendarmeはオープン ソースであるため、同じ問題が発生する可能性があるため、Gendarmeを使用する必要があります。(なぜ Microsoft はテスト駆動型開発に頭を悩ませられないのでしょうか?)

于 2010-02-17T09:03:25.300 に答える
0

私のRoslynCTP ベースの FxCop テスト フレームワークをチェックしてみてください。ルールを実行し、正しい問題にフラグを立てたことを確認するために必要なコードが含まれています。Roslyn はまだ CTP にあるため、現時点ですべての .NET 言語機能をテストできるわけではありません。

任意のアセンブリに対してルールを実行するために必要なコードを抽出するのは非常に簡単です。

このプロジェクトへのルールの貢献も大歓迎です:)。

http://fxcopcontrib.codeplex.com/

于 2012-01-22T12:53:34.743 に答える