2

プロジェクトでカスタム属性を使用しており、それらを単体テストに統合したいと考えています。

現在、Rhino モックを使用してモックを作成していますが、それらに属性 (およびパラメーター) を追加する方法がわかりません。

私は何かを逃しましたか、それとも不可能ですか?他のモックフレームワーク? または、属性を使用してダミーの実装を作成する必要がありますか?

例: プラグイン アーキテクチャ (IPlugin) にインターフェイスがあり、プロパティにメタ情報を追加する属性があります。次に、追加の処理のためにプラグイン実装でこの属性を持つプロパティを探します (その値を保存し、GUI 読み取り専用としてマークします...)

モックを作成するときに、属性をプロパティまたはオブジェクト インスタンス自体に簡単に追加できますか?

編集:同じ質問の投稿を見つけました -> link。答えは 100% ではなく、Java です...

編集2:それは可能です...さらに(SOで)検索し、2つの関連する質問(+回答)を見つけました

ここここ

さて、これはすでに何らかのモッキング フレームワークで実装されていますか?

4

3 に答える 3

1

カスタム属性をテストした方法の例を次に示します。この場合、メソッドで使用されるカスタム属性があります。私のテスト クラスでは、カスタム属性が適用されるプレースホルダー メソッドを作成しました。次に、リフレクションを使用してカスタム属性のインスタンスを取得しました。

[TestFixture] public class SomeRandomAttributeTest
{
    [SomeRandom(RestrictionType.Local)]
    public void PlaceholderMethodForAttribute() {throw new ApplicationException(this.ToString());}

    [Test]public void BlahBlahIsBlahTheBlah()
    {
        object[] attributes = this.GetType().GetMethod("PlaceholderMethodForAttribute").GetCustomAttributes(false);
        Assert.AreEqual(1, attributes.Length);
        Assert.IsInstanceOfType(typeof(SomeRandomAttribute), attributes[0]);

        Assert.AreEqual("Yada yada yada", ((SomeRandomAttribute) attributes[0]).Yada);

    }
}
于 2008-11-25T23:09:21.573 に答える
1

Why can't you just do something like:

var sut = new SomeRandomAttribute(RestrictionType.Local);
Assert.AreEqual("Yada yada yada", sut.Yada);

If you would like to test the code that visits all your types and does some stuff for each of the SomeRandomAttribute's it finds, I would suggest you split it in retrieving the MethodInfo objects that are decorated with your custom attribute and the operations that need to be performed on these objects. The later should be easy to test given a correctly configured MethodInfo object and attribute. The former could be done by using specific test placeholders for your attribute like suggested by Joseph.

于 2009-03-17T23:46:45.947 に答える
0

何をテストする必要があるかによって異なります。

  • 属性のいくつかの「機能」をテストします。追加した属性が装飾するクラス/メソッドに何らかの影響を与える場合は、その属性でIPluginを継承するダミー クラスを作成し、その動作が属性の存在から影響を受けていることをテストできます。価値。
  • 属性の内部機能をテストしたい場合は、その属性を作成し、 assert を使用してその最終結果を確認してください。

ここで嘲笑する必要はないと思います。

于 2010-05-04T20:04:29.993 に答える