2011-01-08 25 views
1

初期化時にintをとるオブジェクト "SqlGymSessionRepository"をテストしようとしています。パラメータが指定されていない場合は、エラーがスローされます。私はこれがどう動くべきかを理解できません。私はこのようなものを持っています:模擬オブジェクトコンストラクタのテスト

[TestMethod] 
[ExpectedException(typeof(ArgumentNullException))] 
public void Throw_Exception_If_Not_Session_Id() 
{ 
    var mockRepos = new Mock<SqlGymSessionRepository>(); 
} 

私はコンストラクタをどこでテストすべきか分かりません。コメントあたり

​​

更新

答えて

4

テストしているクラス(実装)を模擬したくありません。あなたは、クラスに対する依存関係を模倣したいと思う。 SqlGymSessionRepositoryをテストしているならば、そのモックを望むわけではありません。その実装が必要です。嘲笑はSqlGymSessionRepositoryが依存する他のクラスのためのもので、テストのためにそれを提供します。

コンストラクタを直接呼び出します。

1

あなたはコンストラクタをテストしたい場合は、それを呼び出す

あなたはそれがNULL可能でint型をとると述べています。コンパイラは、常にnullまたは整数値のいずれかで呼び出されることを保証します。 nullが有効でない無効な初期化である場合、コードで例外がスローされ、そのコードをテストできます。メソッドがパラメータなしで呼び出されることをテストする必要はありません。 C#は静的に型指定されているため、必要なすべてのパラメータに値が指定されていない限り、コードはコンパイルされません。

+0

オブジェクトにintが必要なので、コンパイル時エラーがあるので、excpetionをテストするためにnullで作成できないという問題がありますか? – hoakey

+0

コンストラクタのコードはどのように見えますか?コンストラクタがintを受け取った場合、nullを渡すことはできません。そのためにテストする必要はありません。それがintを取る場合、あなたはnullを渡してそれをテストすることができます。 – driis

+0

nullを許可しないintは必要ありません。私はそれがintなしで呼び出される可能性があると思います。この場合、例外を書き込むのではなく、単にシステムエラーをスローする必要がありますか? – hoakey

0
​​