2010-09-12 172 views
0

我在NUnit 2.5+的基礎上構建了一個受RSpec啓發的庫,以提高我的測試可讀性。源代碼位於http://github.com/educobuci/SpecUnit如何測試NUnit助手?

這個庫讓我寫這樣的測試:

[Test] 
public void It_should_returns_0_for_all_gutter_game() 
{ 
    var game = new Bowling(); 
    for (int i = 0; i < 10; i++) 
     game.Hit(0); 
    game.Score.Should(Be.Equal(0)); 
} 

的「應該」的方法是接收一些NUnit的說法一樣,基本上是一個行動的所有對象的擴展方法:

public static class Be 
{ 
    public static Action<T> Equal(T to) 
    { 
     return (target) => NUnit.Framework.Assert.AreEqual(target, to); 
    } 
} 

圖書館工作得很好,但我沒有對圖書館本身進行測試......基本上是因爲我不知道如何測試它!

那麼,我該如何測試它呢?我的意思是,如何確保「object.Should(Be.Equal(object))」真正檢查平等嗎?

+1

個人而言,我剛纔堅持'Assert.AreEqual(0,game.Score)',它是無限更容易比理解'game.Score.Should(Be.Equal(0))'。它不僅不需要額外的單元測試,而且也不需要另外一組文檔就可以全部解決。 – Dave 2010-09-12 00:39:25

+0

@Dave我的想法是隻使用一個框架(我的:)。除了寫作更「有機」之外,它還提供了設計時的類型檢查(感謝泛型)。 – 2010-09-12 02:31:07

回答

1
[Test] 
public void Be_Equal_action_throws_AssertionException_for_inequal_integers() 
{ 
    var action = Be.Equal(0); 
    bool raised = false; 
    try 
    { 
     action(1); 
    } 
    catch (AssertionException) 
    { 
     raised = true; 
    } 
    Assert.IsTrue(raised, "No AssertionException was thrown"); 
} 
+0

其實我打算使用Assert.Throws/DoesNotThrow,但這是主意。謝謝! – 2010-09-12 02:25:43