2012-05-09 20 views
3

メッセージボックスプロンプト方法のためのNUnitのテストケースを書くIは、以下の構造を有する方法有する

bool myMethod(some arguments) 
{ 

    //Show User Dialog 

} 

ユーザダイアログが示されている4つのボタンを有し、「はい」、「はいすべてに」 、 "No"、 "No To All"のいずれかを選択します。

テストケースを実行すると、ユーザーダイアログが表示されますが、ユーザーがいずれかのボタンをクリックするまでテストケースが続行されません。 nUnitテストケースを使用してそのようなメソッドをカバーするにはどうすればよいですか?

+0

この方法ではダイアログに*唯一*のことはありますか?もしそうなら、それをテストする必要はありません。あるいは、メソッドは他の作業の一部としてダイアログを表示しますか? @Oliverがその答えに示唆しているように、ダイアログを表示する部分をスタブアウトする必要があります。 –

答えて

2

スタブShow User Dialogコールを注入する必要があります。そして、あなたはテスト中に目的のユーザーの回答にスタブを設定し、メソッドを呼び出すことができます。

public class MyClass 
{ 
    private IMessageBox _MessageBox; 

    public MyClass(IMessageBox messageBox) 
    { 
     _MessageBox = messageBox; 
    } 

    public bool MyMethod(string arg) 
    { 
     var result = _MessageBox.ShowDialog(); 
     return result == DialogResult.Ok; 
    } 
} 

internal class MessageBoxStub : IMessageBox 
{ 
    DialogResult Result {get;set;} 

    public DialogResult ShowDialog() 
    { 
     return Result; 
    } 
} 

[Test] 
public void MyTest() 
{ 
    var messageBox = new MessageBoxStub() { Result = DialogResult.Yes } 
    var unitUnderTest = new MyClass(messageBox); 

    Assert.That(unitUnderTest.MyMethod(null), Is.True); 
} 
1

テストする内容によって異なります。 あなたが(彼らはYES、NOなどを押す)ユーザーの応答後のアプリケーションのフローについてだけ心配しているなら、あなたは単に「偽」レスポンススタブアウトができますように

public void MessageBox_UserPressesOK() 
{ 
var result == Dialog.OK 
    // test 
} 

をと。

+0

var result == DialogResult.OKは、メッセージボックスが閉じられたときに実行されます。しかし、どのように私はメッセージボックスを閉じます、私はメッセージボックスを表示する元のソースコードを変更することはできません。 –

+0

基本的に、私はテストケースを実行するためのユーザーのやりとりをしたくありません。 –

+0

私の主張は、あなたがメッセージボックスを開くことさえせず、あなたのテストケースに対するあなたの偽の応答です。 –

1

あなたはTypemock Isolatorを使用することができます(これは無料のツールではないことに注意)、ここでは自分のWebページからあなたの正確な例を示します。

[Test] 
public void SimpleTestUsingMessageBox() 
{ 
// Arrange 
Isolate.WhenCalled(()=>MessageBox.Show(String.Empty)).WillReturn(DialogResult.OK); 

// Act 
MessageBox.Show("This is a message"); 

// Assert 
Isolate.Verify.WasCalledWithExactArguments(()=>MessageBox.Show("This is a message")); 
} 
関連する問題