2010-02-05 3 views
0

MVC 프레임 워크를 사용하여 응용 프로그램을 작성합니다.이 프레임 워크는 우리 시스템의 많은 상용구 배선을 처리합니다. 특히 - 응용 프로그램은 Parsley MVC 프레임 워크를 사용하여 Flex로 작성됩니다. 그러나 질문은 특정 언어가 아닙니다. 하는가 응답, 내 시스템의 다른 곳에서, 다음 코드를실용적인 단위 테스트

[Event(name="attemptLogin",type="com.foo.AttemptLoginEvent")] 
[ManagedEvents["attemptLogin"] 
public class LoginViewPM { 
    public function attemptLogin(username:String,password:String):void 
    { 
     dispatchEvent(new AttemptLoginEvent(username,password)); 
    } 
} 

: 내 프리젠 테이션 모델 /에서

코드 숨김/(그것을 부르기 위하여 당신이 원한다 무엇 이건) 뷰 - 컨트롤러, 나는 이런 일이있을 수 있습니다 이 모양은 다음과 같습니다.

public class LoginCommand { 
    [MessageHandler] 
    public function execute(attemptLoginEvent:AttemptLoginEvent):void { 
     // Do login related stuff 
    } 
} 

Flex/Actionscript에서 메타 태그는 컴파일러가 확인하지 않습니다. 예를 들어

[Event(name="attemptLogin",type="com.foo.AttemptLoginEvent")] 
[ManagedEvent["attemptLogin"] // Spelling mistake - metatag is ManagedEvents 
public class LoginViewPM { 

및 상기 두 예에서

[Event(name="attemptLogin",type="com.foo.AttemptLoginEvent")] 
[ManagedEvent["attemtLogin"] // Spelling mistake - event name is wrong 
public class LoginViewPM { 

이 프레임 워크는 실패 할 것이다. 첫 번째 예제에서는 메타 태그가 잘못되어 자동으로 실패하므로 프레임 워크가 절대 참여하지 않습니다. 두 번째 예제에서 우리는 상황이 잘못되었다는 것을 부분적으로 경고하는 런타임 로깅을 얻습니다.

이 점을 감안할 때 MVC 프레임 워크의 임무와 관련하여 PM의 attemptLogin() 메소드에 대한 단위 테스트의 실용적인 수준은 무엇입니까? 즉 :

할까요 I 다음 AttemptLoginEvent는 MVC 프레임 워크 이벤트가 전달 될 때 LoginCommand 프레임 워크에 의해 호출됩니다 것을

  • 시험에 의해 관리되는

    • 테스트합니다.

    다른 컨테이너/프레임 워크 환경에서는 프레임 워크의 책임을 수행하는 테스트를 작성하지 않으므로 (IMHO) 이로 인해 취성 테스트가 발생합니다. 그러나, 컴파일러 검사의 부족을 감안할 때,이 경우에 그것은 과장되게 보일 수 있습니다.

    생각하십니까?

  • 답변

    0

    생각해 보면 코드 작성자가 얼마나 잘 입력 할 수 있는지 테스트하고있는만큼 프레임 워크의 책임은 실제로 테스트하지 않습니다.

    그러나 이벤트를 작성한 동일한 코더도 테스트를 작성하고 이벤트 이름이 자주 업데이트되지 않으면 무언가 오타가 발생할 가능성이 높기 때문에 아마 건너 뛸 수 있습니다. 테스트가 작성되고 있습니다.

    0

    테스트하려는 것은 통합 테스트와 같은 것입니다. 단위 테스트가 필요하면 단위가 무엇인지 정의해야합니다.

    이벤트를 테스트하려는 경우, 이벤트 수신자를 조롱하고 모의이 후에 호출되었는지 확인하십시오.

    public class MockLoginCommand : ICommandReceiver { 
    
        public bool BeenCalled { get; set; } 
    
        [MessageHandler] 
        public function execute(attemptLoginEvent:AttemptLoginEvent):void { 
         BeenCalled=true; 
        } 
    }