2016-03-28 8 views
2

festgelegt wurde Ich versuche zu lernen, wie Moq zu verwenden, und das funktioniert nicht: Ich habe eine Schnittstelle mit einer TextBox und einer Presenter-Klasse, die diese Schnittstelle verwenden. Ich möchte in der Lage sein zu überprüfen, dass eine Methode in dieser Klasse die Texteigenschaft der TextBox mit einem bestimmten Wert festgelegt hat. Dies ist, was ich versucht habe:Überprüfen Sie, dass eine Eigenschaft mit Moq

[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"); 
} 

` jemand mich in die richtige Richtung zeigen kann und auch erklären, warum dies nicht der Fall ist:

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;   
} 
} 

In meinem Test habe ich so etwas wie dies tun wollen Arbeiten?

+0

Ich denke, das http://stackoverflow.com/a/1642192/1363 helfen könnte –

Antwort

1

Sie können eine echte TextBox erstellen und den Schein zurückgeben. Dann können Sie in der Assert-Phase gegen diese echte TextBox testen. Hier ein Beispiel:

//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

Ich habe versucht, Ihre Lösung: es funktioniert! Ich habe es ein bisschen weiter getestet, indem ich den Eigenschaftstyp in string geändert habe und dann auch das SetupSet/VerifySet funktioniert hat. So scheint es, dass die Eigenschaft SetupSet nur mit primitiven Typen und nicht mit Referenztypen funktioniert, ist das richtig? Danke vielmals. – wosi

+0

Ich bin mir nicht sicher, ob ich das verstehe. Was hat nicht funktioniert? Welche Eigenschaft hast du in String geändert? –

+0

Sie missverstanden: alles hat funktioniert. Ich habe nur etwas weiter untersucht, indem ich den Typ der in der Schnittstelle deklarierten Eigenschaft von TextBox in String geändert habe. Dann könnte ich SetupSet auch ohne Fehler verwenden. Also anscheinend wird diese NullReferenceException, die ich erlebt habe, nur ausgelöst, wenn Sie einen Referenztyp verwenden (z. B. wie TextBox), richtig? – wosi

Verwandte Themen