2016-03-28 11 views
2

私はMoqの使い方を習得しようとしていますが、これを動作させることができません:私はTextBoxとそのインターフェイスを使用するPresenterクラスとのインターフェイスを持っています。私はそのクラスのいくつかのメソッドが特定の値を持つTextBoxのテキストプロパティを設定していることを確認できるようにしたい。私のテストでプロパティがMoqで設定されていることを確認してください

public interface IView 
{ TextBox MyTextBox { get; } } 

public class Presenter 
{ 
private IView _view; 

public Presenter(IView view) 
{ _view = view; } 

public void Foo(string txt) 
{ 
// try to set the Text in MyTextBox: 
// this gives a NullReferenceException => _view.MyTextBox.Text = txt;   
} 
} 

を、私はこのような何かをしたい:

[Test] 
public void Test_For_TestBoxText_Set() 
{ 
var mockView = new Mock<IView>(); 
var presenter = new Presenter(mockView.Object); 
presenter.Foo("bar"); 
mockView.VerifySet(v => v.MyTextBox.Text = "bar"); 
} 

` 誰もが正しい方向に私を指すともこれがない理由を説明することができますこれは私が試したものですワーキング?

+0

私はこれは私があなたのソリューションを試してみたhttp://stackoverflow.com/a/1642192/1363 –

答えて

1

実際にTextBoxを作成して、それを返すことができます。その後、アサートフェーズでは、その本物のTextBoxに対してテストすることができます。次に例を示します。

//Arrange 
Mock<IView> moq = new Mock<IView>(); 

var textbox = new TextBox(); 

moq.Setup(x => x.MyTextBox).Returns(textbox); 

Presenter presenter = new Presenter(moq.Object); 

//Act 
presenter.Foo("test"); 

//Assert 
Assert.AreEqual("test", textbox.Text); 
+0

を助けることができると思う:それは働きます!プロパティの型を文字列に変更し、SetupSet/VerifySetを変更してもう少しテストしました。だから、プロパティSetupSetはプリミティブ型でのみ動作し、参照型では正しく動作しないようですね?どうもありがとう。 – wosi

+0

私は分かりません。何がうまくいかなかったのですか?どのプロパティを文字列に変更しましたか? –

+0

あなたは誤解しています。私は、インターフェイスで宣言されたプロパティの型をTextBoxからstringに変更するだけで、さらに少し調べました。次に、エラーなしでSetupSetを使用することもできます。だから明らかに、私が経験したNullReferenceExceptionは、TextBoxのような参照型を使用したときにスローされます。 – wosi

関連する問題