14

これを行う最善の方法は何だろうと思っています... 自分のプロジェクトの 1 つに PostSharp を導入することに興味がありますが、属性でマークされたクラスを適切に単体テストする方法がわかりません。

例えば:

public class hello {

    [MyAspectThatDoesSomethingToTheDatabaseWhenThisMethodGetsCalled]
    public int omg(string lol) {
        //fancy logic in here
    }
}

omg() メソッドのロジックをテストしたいのですが、実際にはデータベースがないため、単体テストではアスペクトが呼び出されないようにする必要があります。

考え?

4

7 に答える 7

3

私の意見では、アスペクトが手動でコーディングされているかのようにコードをテストする必要があります。つまり、アスペクトによって実装された機能を含む、メソッドの全機能をテストする必要があります。

この質問は、PostSharpオンラインドキュメント(http://doc.postsharp.net/postsharp-3.0/Content.aspx/PostSharp-3.0.chm/html/2ad6cf92-08eb-4537-a434-d88a3e493721.htm )に記載されています。

于 2010-02-13T18:49:05.380 に答える
3

ポストシャープがどのように機能するかは完全にはわかりませんが、現在理解しているように、ビルド後のプロセスを呼び出してアスペクトを IL に織り込みます。

私の理解が正しければ、ビルド後の織りをスキップできる場合は、アスペクトを無視してメソッドをテストする必要があります(アスペクトを別の場所で個別にテストする必要があります)。

なんで?

アスペクトとメソッドをテストすると、一度に 3 つのことをテストすることになります。

  1. メソッド
  2. 側面
  3. コードへのアスペクトの織り込み

これは悪いカルマであり、何か問題が発生した場合にウサギの穴に落ちる可能性があります (単体テストを統合テストにするだけでなく)。

上記のリストを見ると:

  • これにより、メソッドが期待どおりに機能することを確認することに集中できるため、他の気を散らすことなくメソッドをテストする必要があります-それ以上でもそれ以下でもありません。
  • 使用するたびにアスペクトをテストする必要はありません。一度テストして、思ったとおりに動作することを確認してください。
  • ウィービングが機能することをテストする必要はありません。それはポストシャープの実装の一部としてテストされています (されるべきです)。
于 2010-03-07T19:31:56.187 に答える
2

純粋な UNIT テストを作成する場合は、プロジェクトでコンパイル シンボル 'SkipPostSharp' を設定するか、MSBuild プロパティ 'SkipPostSharp=True' を設定して、UNIT TESTING ビルド中にモジュールの PostSharp を無効にすることを検討してください。

統合テストに満足している場合は、DB アクセスを含むメソッドと PostSharp 属性の完全な機能をテストできます ( Gael の提案による)。

于 2011-12-10T23:59:25.883 に答える
1

私はガエルに同意しません。友人から、これから作成するコードをテストする必要があることを学びました。通常は1回だけです。

于 2010-03-07T13:42:29.573 に答える
1

コード内のデータベースに関連するアスペクトをオフにするために、TurnOffAspects というブール値プロパティを持つ TestingEnvironment という静的クラスを導入しました。アスペクトのコードはこのプロパティをチェックし、「true」に設定されている場合、アスペクトは何もせずに戻ります。テストのセットアップ中に TestingEnvironment.TurnOffAspects プロパティを true に設定し、テストのティアダウン中に false に戻します。もちろん、各側面ごとに 1 つのプロパティを導入することで、物事をより細かくすることができます。テストに大きな影響を与え、テストに合格しても本番コードが失敗する可能性があるため、オフにする側面を慎重に選択する必要があります。

于 2011-03-01T08:35:08.683 に答える
0

おそらく、依存性注入を使用して、アスペクトクラスに静的プロパティを導入し、使用するデータベースアクセスプロバイダーの種類を決定して(ファクトリを使用するなど)、テストの範囲内で偽のプロバイダーを設定できます。

于 2010-02-10T20:26:47.797 に答える
0

私の現在のアプローチは、TFS のビルド プロセスの一部としてテストを実行することです。これはすべてのシナリオに役立つわけではありませんが、PostSharp の影響を受けずにビジネス ロジックの単体テストを実行できるソリューションを見つけるのにかなりの時間を費やしました。

2 つの異なるビルド定義を作成しました。そのうちの 1 つは MSBuild 引数が に設定され/p:SkipPostSharp=True(これは単体テストを実行するものです)、もう 1 つはFalseそれぞれ に設定されています。さらに、PostSharp を使用してビルド定義のDisable Testsオプションをに設定しました。True

私はこれが理想的ではないことを知っています (特に、何も変更せずにローカルでテストを実行できないという問題があるため) が、他の方法を見つけることができませんでした。同じように悩んでいる人は少なくないようです。私は MSBuild とその構成に関してまったくの初心者なので、より詳しい知識を持つ人が助けてくれるかもしれません。

またConfiguration Manager、Visual Studio で をいじって別のビルド定義を作成しましたが、すべての試みは何よりも多くの問題を引き起こしました。

于 2012-12-11T16:09:02.800 に答える