不建议在测试中一次测试一个以上的东西。
您还应该避免测试中的逻辑(switch、if、else、foreach、for、while),因为测试的可读性较差并且可能会引入隐藏的错误。
许多简单、易读、因此可维护的测试,每个只测试一件事,远比一项复杂的测试好得多。
回复您的编辑
测试过滤器可以通过将过滤器与属性分离来实现。这是一个示例: LoadMembershipTypeListFilter 类具有使用测试假货所需的“接缝”。这是要测试过滤器中的逻辑的地方。
public class LoadMembershipTypeListFilter : IActionFilter
{
private IMembershipTypeProvider _provider;
private IMembershipTypeAdminMapper _mapper;
public LoadMembershipTypeListFilter(IMembershipTypeProvider provider, IMembershipTypeAdminMapper mapper)
{
_provider = provider;
_mapper = mapper;
}
#region IActionFilter Members
public void OnActionExecuted(ActionExecutedContext filterContext)
{
}
public void OnActionExecuting(ActionExecutingContext filterContext)
{
//implementation...
}
#endregion
}
而且这里的属性使用了过滤器,这个例子通过调用服务定位器来解析过滤器需要的依赖:
public class LoadMembershipTypeListAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var filter = new LoadMembershipTypeListFilter(IocResolve.Resolve<IMembershipTypeProvider>(), IocResolve.Resolve<IMembershipTypeAdminMapper>());
filter.OnActionExecuting(filterContext);
}
}
而你的控制器使用属性:
[LoadMembershipTypeList]
public ActionResult Create()
{
return View();
}