開発プロセスで Give-When-Then として実装している Arrange/Act/Assert に関する説明を探しています。私はコンセプトに固執しようとしていますが、特定のイベント (特にユーザー入力) の間、単体テストで適切にキャプチャするために、「Act」アクションを「Arrange」アクションとして再検討する必要があることがわかりました。 . ここでは、モッキング フレームワークとしてMoqを使用しています。
例: 私のプロジェクトでは、コードの焦点はユーザーが提供する画像です。ユーザーが画像を選択できる機能がありますが、画像が既に存在する場合は、アクティブな画像を置き換えるか、アクションをキャンセルしてアクティブな画像を保持するかをユーザーに問い合わせます。この特定のシナリオを記述する適切な方法は次のようになると思います。
画像が既に存在するワークスペースが与えられた
場合ユーザーが新しい画像を要求し
、ユーザーがアクティブな画像を置き換えることを選択した場合
プログラムは画像を置き換える必要があります
テスト的には、次のようになります。
mockModel.SetupProperty(m => m.Image, new Bitmap(100, 100)); // Given
mockView.Raise(v => v.UserRequestsNewImage += null); // When
mockMBox.Setup(mb => mb.ViewResult).Returns(ViewResult.OK); // And
mockView.Verify(v => v.OpenAddImageFileDialog(), Times.Once); // Then
コード的には、私のプレゼンターでは、次のようになります。
private void view_UserRequestsNewImage()
{
if (model.Image != null)
{
mbox.ShowDialog();
if (mbox.ViewResult == ViewResult.Cancel)
return;
}
view.OpenAddImageFileDialog();
}
Setup
ただし、ビューRaise
が呼び出された後にメッセージ ボックスが発生するため、これは失敗します。Setup
そのため、その前にを移動する必要があります (そして、 を使用Setup
すると、「アレンジ」セットアップのように感じられます):
画像が既に存在するワークスペースが与えられ
、ユーザーがアクティブな画像を置き換えることを選択した
場合ユーザーが新しい画像を要求した場合プログラムは画像を置き換える必要があり
ます
しかし今、私のシナリオは順不同で、正しく流れていないように感じます。画像を置き換えるというユーザーの選択 ( ) は、ユーザーが新しい画像を追加するという選択 ( ) の後Setup
に発生するため、Act ステップの一部であるべきだと思いますが、適切にモックするためには、アレンジステップに入れます。Raise
ここで間違ったモッキングフレームワークを使用していますか? これを行うより良い方法はありますか?または、Given-When-Then セットアップでユーザー入力ステップをどこに配置するかについて非現実的に心配していますか?
前もって感謝します。