私は単純なasp.net mvc 3アプリのテストを書いているので、私は過去に盲目的に書いたテストについて何か気づいた。このテストは本当に価値を追加しますか?
[TestMethod]
public void Add_Saves_Object()
{
var rep = new Mock<IRepository>();
rep.Setup(x => x.Save<Object>(It.IsAny<Object>())).Returns(new Object() {Id = 1});
var pick = rep.Object.Save<Pick>(new Object());
Assert.IsNotNull(pick);
Assert.AreEqual(1, pick.Id);
}
ここでの仮定は、私は「インメモリ」は、データストアに対する私のIRepository実装をテストしてみたということで、(私は私のリポジトリをからかっていたよう)Saveメソッドは正しくオブジェクトを返します。私のリポジトリ・テストが正常に終了したので、コントローラがリポジトリを正しく呼び出し、saveメソッドから戻ってオブジェクトを受け取ることをテストする必要がありますか?このテストは価値を追加しますか?それを書いておく価値がありますか?
このシナリオにカーブを追加すると、コントローラのSaveObjectメソッドが別のアクションにリダイレクトされます。どのようにリダイレクトをテストしますか?
RDBMSのメモリ内バージョンの使用についてのあなたのコメントは、実際には和音を鳴らします。私はそれを数回焼き付けました - 最も顕著なのは、r.Name == nameVar、nameVarがnullの場合、LINQ/EFがクエリで正しくNULLを処理しないことです。WHERE Nameの無駄なT-SQLクエリを取得しますIS NULLクエリではなく、@whateverがnullの@whatever。テストは正常に実行されますが、現実の世界では実行されません –