2009-10-19 12 views
6

Próbuję objąć TDD i zacząłem uczyć się o szyderstwie. Potrzebuję porady na temat tego, co powinienem przetestować i jak sprawić, by moje klasy były bardziej behawioralne, a nie proste kontenery danych (z grupą pobierających/ustawiających).Przejście od weryfikacji państwowej do weryfikacji behawioralnej za pomocą MOQ

Weź pod uwagę tę klasę.

public class Post 
{ 
    List<Comment> Comments {get; private set;} 

    public void AddComment(string message) 
    { 
     Comment.Add(new Comment(message)); 
    } 
} 

Przykładem testu weryfikacji stanu byłoby

[Test] 
public void CanAddCommentToPost() 
{ 
    Post p = new Post(); 
    p.AddComment("AAAAA"); 
    Assert.AreEqual(1, Comments.Count); 
} 

ja”, nie do końca pewien, co powinienem robić weryfikacji behawioralnej, może ktoś podać kilka próbek za pomocą Moq?

+0

Czy kiedykolwiek dostałeś postanowienie na to pytanie? Jestem bardzo ciekawy, jak ci to idzie. –

Odpowiedz

5

Będziesz musiał trochę przeprojektować swoją klasę Post, ale nie martw się.

Ten niewielki przeprojektowanie da ci możliwość użycia Moq do sprawdzenia zachowania, którego się spodziewasz. Pokażę ci również nieco lepszy sposób nadawania nazw testom, aby było jasne, co próbują przetestować.

[Test] 
public void AddComment_NonNullMessage_IsAddedToCollection 
{ 
    string message = "Test message"; 

    //Setup expectations 
    Mock<IList<Comment>> commentsMock = new Mock<IList<Comment>>(); 
    commentsMock.Setup(list => list.Add(new Comment(message))); 

    //Create target, passing in mock list 
    Post target = new Post(commentsMock.Object); 
    target.AddComment(message); 

    //Verify our expectations are met 
    commentsMock.VerifyAll(); 
} 

I to wszystko. The Mock automatycznie wyrzuci wyjątek, jeśli wszystkie oczekiwania nie zostaną spełnione poprawnie.

Mam nadzieję, że to pomoże.

-Anderson

+0

+1. Zobacz również [moq Quickstart] (http://code.google.com/p/moq/wiki/QuickStart) w części Weryfikacja. – TrueWill

+0

Twój przykład nie działa po wyjęciu z pudełka. Zestaw ustawień nie jest dopasowany, ponieważ komentarz przekazany w konfiguracji nie jest równy komentarzowi dodanemu w metodzie Post.AddComment. Zmieniłem konfigurację na list.Add (It.IsAny ()), moim uzasadnieniem jest to, że nie obchodzi mnie wiadomość, którą zawiera, ale raczej po prostu weryfikuję, że to się nazywa. – brumScouse

0

Nie pamiętam składni moq, ale widzę to tak.

Twórz komentarze jako interfejs IComments i zapewnij, że to polecenie jest wywoływane w interfejsie.

+0

To podejście, które podjąłem w mojej odpowiedzi, ale poszedłem ze standardowym IListem , a nie nowym interfejsem IComments. –

Powiązane problemy