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