Не рекомендуется тестировать в тестах более одного объекта одновременно.
Вам также следует избегать логики в тестах (переключение, 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();
}
person
CRice
schedule
22.09.2010