Welcome

首页 / 软件开发 / .NET编程技术 / 开发项目过程中辅助方法好处多多

开发项目过程中辅助方法好处多多2011-06-06 博客园 Jeffrey Zhao在开发项目过程中,总是会出现大量的辅助方法,例如字符串处理,代码检 验,格式输出等等。如果您发现自己在多次编写类似的代码,可能就要想着如何 把这些代码进行提取,变成辅助方法(亦或是类库甚至框架,关于这方面粒度问 题在此不作讨论)。辅助方法的作用除了遵循DRY原则之外,也能让代码更容易 编写,更为清晰,可读性也能更好——而且只要您“去做”,就会发现要得到这 些好处并不困难。

在这里举一个最简单的例子,对Index方法的单元测试:

[TestMethod]
public void IndexTest()
{
UserIdentity identity = new UserIdentity();

Mock<HomeController> mockController = new Mock<HomeController>() { CallBase = true };
mockController.Setup(c => c.Identity).Returns (identity);

var result = mockController.Object.Index() as ViewResult;
if (result == null)
{
throw new Exception("result is expected to be ViewResult but not.");
}

Assert.AreEqual("", result.ViewName,
"the view name is expected to be the default one but "{0}"", result.ViewName);
Assert.AreEqual("", result.MasterName,
"the master name is expected to be the default one but "{0}"", result.MasterName);

var model = result.ViewData.Model as IndexModel;
if (model == null)
{
throw new Exception("model is expected to be IndexModel but not.");
}

Assert.AreEqual(identity, model.Identity);
Assert.AreEqual("Welcome to ASP.NET MVC!", model.Message);
}

从“var result = ...”这一行代码开始到结尾,都是对Index方法调用结果 的断言,其中包括以下几点:

返回值为ViewResult对象

ViewName是默认值

MasterName是默认字符串

Model为IndexModel对象

Model的各属性为正确的值

这不可或缺的五点要求总共占用了十几行代码(虽然它们都非常清晰明白) 。如果每个单元测试方法都需要编写这些代码,这无疑是一件令人乏味的事情。 这时,您就可以提供辅助方法来简化单元测试的编写。