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 {

上記の 2 つの例では、フレームワークは失敗します。最初の例では、暗黙のうちに失敗します (メタタグが正しくないため、フレームワークは関与しません)。2 番目の例では、何かが間違っていることを部分的に警告するランタイム ログを取得します。

これを考えると、MVC フレームワークの役割に関して、PM での attemptsLogin() メソッドの単体テストの実際的なレベルはどれくらいですか? すなわち:

するべきか:

  • AttemptLoginEvent が MVC フレームワークによって管理されていることをテストする
  • イベントが送出されたときに LoginCommand がフレームワークによって呼び出されることをテストします。

他のコンテナ/フレームワーク環境では、フレームワークの責任を行使するテストを作成しない傾向があります.(IMHO)これは脆弱なテストにつながります. ただし、コンパイラのチェックが不足しているため、この場合は不当に思えるかもしれません。

考え?

4

2 に答える 2

0

テストしたいものは統合テストのように聞こえます。ユニットテストが必要な場合は、ユニットが何であるかを定義する必要があります。

イベントをテストする場合は、イベントレシーバーをモックして、後でモックが呼び出されたかどうかを確認します。

public class MockLoginCommand : ICommandReceiver {

   public bool BeenCalled { get; set; }

   [MessageHandler]
   public function execute(attemptLoginEvent:AttemptLoginEvent):void {
      BeenCalled=true;
   }
}

于 2010-02-05T13:46:35.683 に答える
0

考えてみれば、コーダーがどれだけうまく入力できるかをテストしているほど、フレームワークの責任を実際にテストしているわけではありません。

ただし、イベントを書いたのと同じコーダーがテストも書いている場合、およびイベント名が頻繁に更新されないものである場合は、テストを書いている間にタイプミスが見つかる可能性が高いため、おそらくそれをスキップできます。 .

于 2010-02-05T13:32:42.547 に答える