Il n'est pas recommandé de tester plus d'une chose à la fois lors des tests.
Vous devriez également éviter la logique dans les tests (switch, if, else, foreach, for, while) car le test est moins lisible et introduit éventuellement des bogues cachés.
De nombreux tests simples, lisibles et donc maintenables qui testent chacun une seule chose sont de loin préférables à un test avec beaucoup de complexité.
RÉPONSE À VOTRE EDIT
filtres de test peut être réalisé en séparant le filtre de l'attribut. Voici un exemple: La classe LoadMembershipTypeListFilter a les 'coutures' nécessaires pour utiliser les fakes de test. C'est là que votre logique dans votre filtre est à tester.
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
}
Et l'attribut utilise ici le filtre, cet exemple résout les dépendances du filtre nécessite par un appel au localisateur de services:
public class LoadMembershipTypeListAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var filter = new LoadMembershipTypeListFilter(IocResolve.Resolve<IMembershipTypeProvider>(), IocResolve.Resolve<IMembershipTypeAdminMapper>());
filter.OnActionExecuting(filterContext);
}
}
Et votre contrôleur utilise l'attribut:
[LoadMembershipTypeList]
public ActionResult Create()
{
return View();
}
+1 pour l'exemple de testabilité. –