Below is a useful helper, which allows you to verify whether an Action is decorated with a certain attribute. This is very simple to implement, but you can use something like below.
Test helper
public static class ActionAttributeTestHelper
{
public static bool DoesMethodActionContainAttribute<TController, TActionResult, TAttribute>(Expression<Func<TController, TActionResult>> mExpression)
{
Expression<Func<TController, TActionResult>> methodExp = mExpression;
var methodCall = (MethodCallExpression)methodExp.Body;
var methodInfo = methodCall.Method;
return methodInfo.GetCustomAttributes(false).Any(a => a is TAttribute);
}
}
Controller
public class SutController : Controller
{
[Authorize]
public ActionResult ActionWithAttributeNoParameter()
{
return View();
}
public ActionResult ActionWithNoAttribute()
{
return View();
}
[Authorize]
public ActionResult ActionWithAttributeWithParamter(int i)
{
return View();
}
[Authorize]
[HttpGet]
[OutputCache]
public ActionResult ActionWithMultipleAttributes()
{
return View();
}
}
Unit Tests:
[TestClass]
public class SutControllerTest
{
[TestMethod]
public void ActionWithAttributeNoParameter_ReturnsTrue()
{
// Arrange
var sut = new SutController();
//Act
var doesTheMethodContainAttribute = ActionAttributeTestHelper.DoesMethodActionContainAttribute<SutController, ActionResult, AuthorizeAttribute>((x) => sut.ActionWithAttributeNoParameter());
//Assert
Assert.IsTrue(doesTheMethodContainAttribute);
}
[TestMethod]
public void ActionWithNoAttribute_ReturnsFalse()
{
// Arrange
var sut = new SutController();
//Act
var doesTheMethodContainAttribute = ActionAttributeTestHelper.DoesMethodActionContainAttribute<SutController, ActionResult, AuthorizeAttribute>((x) => sut.ActionWithNoAttribute());
//Assert
Assert.IsFalse(doesTheMethodContainAttribute);
}
[TestMethod]
public void ActionWithAttributeWithParamter_ReturnsTrue()
{
// Arrange
int anyNumber = 7;
var sut = new SutController();
//Act
var doesTheMethodContainAttribute = ActionAttributeTestHelper.DoesMethodActionContainAttribute<SutController, ActionResult, AuthorizeAttribute>((x) => sut.ActionWithAttributeWithParamter(anyNumber));
//Assert
Assert.IsTrue(doesTheMethodContainAttribute);
}
[TestMethod]
public void ActionWithMultipleAttributes_ReturnsTrue()
{
// Arrange
var sut = new SutController();
//Act
var doesTheMethodContainAuthAttribute = ActionAttributeTestHelper.DoesMethodActionContainAttribute<SutController, ActionResult, AuthorizeAttribute>((x) => sut.ActionWithMultipleAttributes());
var doesTheMethodContainHttpGetAttribute = ActionAttributeTestHelper.DoesMethodActionContainAttribute<SutController, ActionResult, HttpGetAttribute>((x) => sut.ActionWithMultipleAttributes());
var doesTheMethodContainOutputCacheAttribute = ActionAttributeTestHelper.DoesMethodActionContainAttribute<SutController, ActionResult, OutputCacheAttribute>((x) => sut.ActionWithMultipleAttributes());
//Assert
Assert.IsTrue(doesTheMethodContainAuthAttribute);
Assert.IsTrue(doesTheMethodContainHttpGetAttribute);
Assert.IsTrue(doesTheMethodContainOutputCacheAttribute);
}
52091bf1-5fa6-42bd-b6f7-e2062e8cc21c|0|.0
Unit Testing