當我爲一個簡單的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方法接收到一個對象?這個測試是否增加了價值?這是值得的時間來寫它?
如果我在此場景中添加曲線,即我的控制器上的SaveObject方法重定向到另一個操作,我將如何測試重定向?
你對關於使用內存版本的RDBMS的評論確實引起了共鳴。我已經被這幾次燒了 - 最令人驚訝的是,如果你說r.Name == nameVar其中nameVar爲null,你會得到一個無用的T-SQL WHERE Name的查詢,那麼LINQ/EF不會在查詢中正確處理null = @whatever與@whatever爲空,而不是IS NULL查詢。測試運行良好,但不在現實世界中 – 2011-01-23 17:52:08