모든 컨트롤러 작업 메서드에 적절한 사용자 지정 특성이 표시되어 있다고 주장하기 위해 일부 단위 테스트를 작성하고 있지만 공용 메서드가 MVC 작업으로 작동 할 수 있는지 여부를 결정하기위한 기준이 무엇인지 알지 못합니다.ASP.NET MVC : 컨트롤러의 메소드가 액션이되는 기준은 무엇입니까?
기준은 반환 값 유형 (ActionResult
또는 파생이어야 함) 일 수 있다고 가정합니다. 사실입니까? 정적 메서드는 어떻습니까?
모든 컨트롤러 작업 메서드에 적절한 사용자 지정 특성이 표시되어 있다고 주장하기 위해 일부 단위 테스트를 작성하고 있지만 공용 메서드가 MVC 작업으로 작동 할 수 있는지 여부를 결정하기위한 기준이 무엇인지 알지 못합니다.ASP.NET MVC : 컨트롤러의 메소드가 액션이되는 기준은 무엇입니까?
기준은 반환 값 유형 (ActionResult
또는 파생이어야 함) 일 수 있다고 가정합니다. 사실입니까? 정적 메서드는 어떻습니까?
은 다음과 같은 기준을 충족해야합니다 :
public
해야하고하지 static
.ToString()
및 패밀리를 제외하기 위해 System.Web.Mvc.Controller
또는 다른 기본 클래스에 정의하면 안됩니다.일반 메서드는 예외를 throw하지만 어떤 이유로 인해 are
동작을 고려했습니다. 반환 유형은 반드시 사용자가 반환 할 수 있으므로 ActionResult
일 필요는 없습니다. 텍스트 데이터의 경우 입니다.
컨트롤러에서 실제 작업 목록을 결정하는 것은 까다로운 문제입니다. 유일한 정답은 그것이 "의존"한다는 것입니다! Saulius가 준리스트는 꽤 정확합니다. - 기본 ControllerActionInvoker를 사용한다면 물론 대부분의 사람들이 사용합니다.
논리를 복제하지 않으려면 ControllerActionInvoker 자체를 사용하여 작업 목록을 가져온 다음 반환되는 목록의 내용을 확인하는 것이 좋습니다.
GetControllerDescriptor() 메서드를 호출 할 수 있도록 ControllerActionInvoker에서 파생 된 클래스를 작성해야합니다. 이 메소드의 반환 값은 ControllerDescriptor이며 컨트롤러 설명 자입니다. 그런 다음 ActionDescriptors 목록을 반환하는 GetCanonicalActions()를 호출 할 수 있습니다. 이들 항목 각각은 일반적으로 무엇이 행동 하는지를 나타냅니다.
은 당신이하는 것이 필요합니다 모두를 연결하려면 컨트롤러에 인스턴스가 설정되었습니다.
그런 다음 결과를 확인하면 완료됩니다!
물론는,이 중 하나를 시도했지만하지 않은 이론의 모든 작품 :)
사울 리우스에 의해 언급 된 것과
세 번째 포인트는 내가 찾던 것입니다 : 나는하지 않았다 Dispose() 등의 메소드로 무엇을해야하는지 알 수 있습니다.감사합니다. –
액션 메소드에 [NonAction] 속성을 적용하면 매우 까다로워집니다. 그렇지 않으면 조치 메소드 인 것처럼 보이는 공용 메소드는 기본 비헤이비어를 대체하는 속성을 가질 수 있습니다. – Eilon