我正在寻找有关人们如何组织控制器测试的整洁建议。
例如,以我的“地址”控制器的“添加”功能为例,
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Add()
{
var editAddress = new DTOEditAddress();
editAddress.Address = new Address();
editAddress.Countries = countryService.GetCountries();
return View("Add", editAddress);
}
[RequireRole(Role = Role.Write)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(FormCollection form)
{
// save code here
}
我可能有一个名为 的夹具"when_adding_an_address"
,但是我需要在此标题下测试两个操作...
我不想在我的夹具中调用我的Act()
方法中的两个动作,所以我将夹具分成两半,但是我该如何命名呢?
"When_adding_an_address_GET"
和"When_adding_an_address_POST"
?
事情似乎变得一团糟,很快。
此外,您如何处理控制器的无状态/无设置断言,以及如何安排上述这些?例如:
[Test]
public void the_requesting_user_must_have_write_permissions_to_POST()
{
Assert.IsTrue(this.SubjectUnderTest.ActionIsProtectedByRole(c => c.Add(null), Role.Write));
}
这是我知道的自定义代码,但你应该明白,它只是检查方法上是否存在过滤器属性。关键是它不需要任何Arrange()
or Act()
。
欢迎任何提示!
谢谢