当我为一个简单的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