2013-01-11 6 views
2

다음 작업을 수행하는 MVC3 응용 프로그램이 있습니다.MVC 동작 특성 테스트

public class FooController : ApplicationController 
{ 
    [My(baz: true)] 
    public void Index() 
    { 
    return view("blah"); 
    } 
} 

이 방법으로 MVCContrib의 TestHelper를 사용하여 MyAttribute로 색인을 장식했는지 확인하는 테스트를 작성할 수 있습니다.

[TestFixture] 
public class FooControllerTest 
{ 
    [Test] 
    public void ShouldHaveMyAttribute() 
    { 
    var fooController = new FooController(); 
    fooController.Allows(x => x.Index(), new List<Type>{typeof(MyAttribute)}); 
    } 
} 

질문 -이 테스트를 변경하여 MyAttribute 장식에 'baz'속성이 true로 포함되어 있는지 테스트 할 수 있습니까?

답변

1

단위 테스트에서 속성을 확인하려면 리플렉션을 사용하여 컨트롤러 메소드를 다음과 같이 검사해야합니다.

[TestFixture] 
public class FooController Tests 
{ 
    [Test] 
    public void Verify_Index_Is_Decorated_With_My_Attribute() { 
     var controller = new FooController(); 
     var type = controller.GetType(); 
     var methodInfo = type.GetMethod("Index"); 
     var attributes = methodInfo.GetCustomAttributes(typeof(MyAttribute), true); 
     Assert.IsTrue(attributes.Any(), "MyAttribute found on Index"); 
     Assert.IsTrue(((MyAttribute)attr[0]).baz); 
    } 
} 

이것은 당신이

+0

예, 반사 확실히 옵션입니다 도움이 될 수 있습니다,하지만 난이보다 간단 뭔가를 찾고 있었다. 매개 변수를 테스트하기 위해 내 두 개의 라이너 테스트가 필요합니다. –

+0

오, 이제 MVCContrib의 테스트 도우미를 사용하고 있습니다. 조건을 확인할 수있는 다른 옵션이 있는지 확실하지 않습니다. – bijayk