1

resharper のテスト フレームワーク拡張機能を作成したいと考えています。このドキュメントはこちら: http://confluence.jetbrains.net/display/ReSharper/Test+Framework+Support

これの 1 つの側面は、特定のコードがテストの一部であるかどうかを示すことです。コード片は IDeclaredElement として表されます。

特定の IDeclaredElement によって表されるコードのファイル名と行番号を取得することは可能ですか?

以下の応答に続きます。

@Evgeny、答えてくれてありがとう。

ユーザーが Visual Studio でこのテストを開いているとします: https://github.com/fschwiet/DreamNJasmine/blob/master/NJasmine.Tests/SampleTest.cs ユーザーが 48 行目の "player.Resume() " 表現。IDeclaredElement は、48 行目で実行したいことを具体的に教えてくれますか? それとも、クラス全体に対応する IDeclaredElement と、クラス全体のファイル名/行番号の範囲を教えてくれるのでしょうか?

私はこれで自分で遊ぶ必要がありますが、あなたがすでに知っていることを活用していただければ幸いです.

4

2 に答える 2

3

はい。

「IDeclaredElement」エンティティは、コード シンボル (クラス、メソッド、変数など) です。アセンブリ メタデータから読み込むことも、ソース コードで宣言することも、ソース コードから暗黙的に取得することもできます。

使用できます

var declarations = declaredElement.GetDeclarations() 

それを宣言するすべての AST 要素を取得する (たとえば、部分クラスの複数の宣言を返す可能性があります)

次に、任意の IDeclaration に対して、次を使用できます。

var documentRange = declaration.GetDocumentRange()
if (documentRange.IsValid())
  Console.WriteLine ("File: {0} Line:{1}",
 DocumentManager.GetInstance(declaration.GetSolution()).GetProjectFile(documentRange.Document).Name,
documentRange.Document.GetCoordsByOffset(documentRange.TextRange.StartOffset).Line
);

ところで、どのテスト フレームワーク拡張機能を開発していますか?

于 2011-07-28T15:08:20.997 に答える
0

IDeclaredElement は、48 行目で実行したいことを具体的に教えてくれますか?

もう一度: IDeclaredElement にはファイル内の位置がありません。代わりに、それは宣言です。すべての宣言 (IDeclaration は通常の AST ノードです) について、それをカバーするドキュメントの範囲があります。前の例では TextRange.StartOffset を使用しましたが、TextRange.EndOffset を使用することもできます。

ファイル内のより正確な位置が必要な場合は、AST ツリーをトラバースし、ドキュメント内の特定の式/ステートメントの座標を確認してください。

于 2011-07-29T08:46:20.643 に答える