1

タイトル通り。

ソートが必要な IComparable を実装するクラスがあります。すべてのメソッドに対してすべての単体テストを作成しました。しかし、IComparable を実装しているかどうかを確認する単体テストを作成することは理にかなっていますか?

UIでソートするときのインターフェースでは機能しないためです。ただし、コンパイルしても機能します。したがって、そのようなテストケースがある場合、誰かがそのインターフェイスを削除した場合にキャッチされる可能性があります。

私のクラスは次のようなものです:

 public class ComparableCustomType: IComparable
    {
        private readonly someFields;

        public ComparableCustomType(AnotherBusinessObject obj)
        {
              //Do some parsing against the obj
        }

        public int CompareTo(object obj)
        {
             //Some custom sorting logic
        }
    }

基本的に私のテストケースは次のようになります。

[TestMethod]
public void CompareTo_IsImplementIComaparable()
{
      IComparable comparable = Isolate.Fake.Instance<ComparableCustomType>();
      Assert.AreNotEqual(null, comparable);    
}

編集:これは私がこのプロパティを使用する方法です....(または、それが人がこのプロパティを使用する方法であると言うべきです...)

public class CustomItem{

    private AnotherBusinessObject anotherBusinessObj = null

    public CustomItem(AnotherBusinessObject obj)
    {
        this.anotherBusinessObj = obj;
    }

    public ComparableCustomType {
        get { return new CamparableCustomType(this.anotherBusinessObj); }
    }

    public string SomeOtherProperty {get;set;}

    publci int AnotherProperty {get;set;}

}

public ObservableCollection<CustomItem> MyCustomCollection {get;set;}

次に、このコレクションは私の GridView にデータバインドされます....そのため、すべての列が自動的に生成されます.....

4

2 に答える 2

5

私の答えを簡単に要約すると、私はノーと言います。クラスが何を実装/継承するかをチェックするために単体テストを書くことはあまり意味がありません。IMO、単体テストは、タイプではなく、ロジック/機能をテストするために作成する必要があります。これは、コンストラクターをインスタンス化できることを確認するためのテストを作成するのとほとんど同じです。通常、そのようなことはやり過ぎであり、この場合もやり過ぎだと思います。

コードはコンパイル時にチェックする必要があります。オブジェクトがインスタンス化されるときにこの制約を適用できます(オブジェクトの使用方法でこれが可能な場合)。

IComparableを実装するクラスが呼び出されたとしましょうFooComparable

IComparable foo = new FooComparable();

同様に、オブジェクトをすでにインスタンス化していて、その唯一の関数が必ずしもIComparableオブジェクトであるとは限らない場合は、他のいくつかの制約を適用できます。あなたがあなたを持っていて、それをコントロールにバインドする前にそれFooComparableを確認したいとしましょう、あなたはこのようなことをすることができます:IComparable

IComparable dataSource = fooObj;

これを試して、FooComparableがIComparableを実装していない場合、コンパイラは文句を言います。より多くの提案を提供できるように、クラスの使用方法のコード例を提供する必要があるかもしれません。

于 2012-04-26T20:49:56.000 に答える
5

コンパイラがキャッチするものは何もテストしないでください。コンパイラがキャッチしないケースがあるので、UT を作成するのは合法のようです。

于 2012-04-26T20:44:13.880 に答える