2010-11-27 7 views
0

TDD関連の質問。私はそのプロパティイヤーズ確認することができますNUnitはプロパティがコレクションであることを確認します

List<int>です:

Assert.IsInstanceOf<List<int>>(viewModel.Years); 

しかし、年がList<int>またはList<int>が含まれているオブジェクトにすることができます。

VSをコーディング中は型オブジェクトの年プロパティを生成するので、私はこれを求めている例

public class ViewModel 
{ 
    public List<int> Years {get;set;} 
    or 
    public object Years {get;set;} 
} 

については

一つの可能​​な解決策は、することができます:私は年を生成します場合は、それはList<int>タイプのものであろう

Assert.AreEqual(yearsList, (List<int>)viewModel.Years); 

年が正しいタイプであることを確認する別の方法はありますか?

答えて

1

私にとって最善の解決策はこれです:

Assert.IsTrue(viewModel.Years is List<int>) 

をしかしそれもReSharperの中:(動作しません

のみ作業し、見栄えの良い方法がこれです:

Assert.IsNotNull(viewModel.Years as List<int>) 

FYI
ReSharperも正しいタイプを決定するのに十分スマートではありません

+0

ありがとうございました。ニースアバター:) –

+0

それは動作しますが、それは明らかではありません... –

+0

あなたは歓迎です:) –

2

これをテストするべきかどうかという質問をバイパスすることは、少なくともYearsをテストするのではなく、List<int>であることをテストする必要があります。IList<int>です。第二に、あなたは本当に強いものが必要ですか? ICollection<int>またはIEnumerable<int>で逃げることができますか?あなたが必要とする最も弱いタイプをテストする必要があります。

その後、私が言う:

static class ObjectExtensions { 
    public static bool Implements(this object o, Type type) { 
     Contract.Requires<ArgumentNullException>(o != null); 
     Contract.Requires<ArgumentNullException>(type != null); 
     Contract.Requires<ArgumentException>(type.IsInterface); 
     return o.GetType() 
       .GetInterfaces() 
       .Contains(type); 
    } 
} 

使用法:

[Test] 
public void Years_is_an_object_that_implements_ilist_int() { 
    // viewModel is ViewModel 
    Assert.IsNotNull(viewModel.Years); 
    Assert.AreEqual(true, viewModel.Years.Implements(typeof(IList<int>)); 
} 
+0

私は正しく理解していれば。問題は実際にはどのように強制的にオブジェクトの代わりにプロパティスタブの右の型を生成する。 –

+0

@ Sergey Mirvoda:質問は "NUnit ...."というタイトルで、 "tdd"と "nunit"とタグ付けされています。私はこれについてVisual Studioについては考えていません。 – jason

+0

VS + NUnit + TDDです。 –

0

を私は両方の答えから最高を取っ:

私のソリューション

namespace Tests 
{ 
    public class AssertExt 
    { 
     public static void IsOfType<T>(T entity) 
     { 
     } 


     public static void IsOfType<T>(T entity, string message) 
     { 
     } 
    } 
} 

私ができるようになりました次のような記述:

AssertExt.IsOfType<Dictionary<int, string>>(viewModel.PrintFor); 

VSは正しいタイプのプロパティを生成します。

残念ながら、私はNUnitのAssertクラスの拡張を作成することはできません。

それは私は多分問題がアサートのprotectedコンストラクタです

Assert.IsOfType<Dictionary<int, string>>(viewModel.PrintFor); 

のようなものを持ってすることはできませんなぜ私は知らないのですか?