2016-08-01 63 views
2

我對此很陌生,所以真的不知道我是否正確執行此操作。 我想測試的代碼是:將逗號分隔的int整數轉換爲int數組的單元測試

public int[] IntArray(string text) 
{ 
    return text.Split(',').Select(x => int.Parse(x.Trim())).ToArray(); 
} 

測試我已經有未完成,所以希望有人能夠幫助:

[TestClass] 
public class ContextHelperTests 
{ 
    public ContextHelper CreateTarget() 
    { 
     var context = new ContextHelper();   
    } 

    return new ContextHelper(); 
} 

[TestMethod] 
public void TestContextHelper() 
{ 
    // Arrange 
    var expectedResult = 12,3; 
} 

// Act 
var values = context.Split(','); 
int actualResult = values.Select(x => int.Parse(x)).ToArray(); 

// Assert 
Assert.That(actualResult, Is.EqualTo(expectedResult)); 
+0

你是什麼意思的「測試不是cpmplete」? – HimBromBeere

+1

你的問題是什麼?你顯示的單元測試代碼是無效的c#。 –

+0

我只是想測試代碼。我已經看過一些例子,並提出了上面的測試代碼 –

回答

2

你不想在你的測試代碼來複制你所有的源代碼邏輯..這沒有任何意義。相反,因爲你知道輸入的是什麼,知道你的輸出應該怎麼那麼就說明它 - 並確保它們相等

你的測試類應該看看下面幾行內容:

[TestClass] 
public class ContextHelperTests 
{ 
    private SomeClassWithThatMethod _instance; 

    private string _inputText = "123 , 324 , 4"; 
    private int[] _expectedOutput = new int[] {123, 324, 4}; 

    [TestInitialize] 
    public void Initialize() 
    { 
     _instance = new SomeClassWithThatMethod(); 
    } 

    [TestMethod] 
    public void IntArray_ValidInput_3ItemsInOutput() 
    { 
     var response = _instance.IntArray(_inputText); 

     CollectionAssert.AreEqual(response, _expectedOutput); 
    } 
} 

而只是爲了它的樂趣 - 檢查出一個名爲FluentAssertions的庫 - 偉大的擴展方法,使所有的Assert.部分更可讀和更清潔

+0

謝謝。如果我使用Assert.That(actualResult,Is.EqualTo(expectedResult))或您描述的那個,我會得到assert不包含'that'定義的錯誤。 –

+0

@ Shan's - ya - 我只是在應對你的斷言,但這裏有一個快速編輯(我仍然更喜歡流利的斷言,但這是個人觀點) –

+0

非常感謝你,我將與此合作。 –

3

當你實現一個測試,你會不會複製你要測試的代碼,但是你測試了整個代碼

例如,如果你想測試你的IntArray方法,你只需要調用它,做一些斷言,以確保它的工作如預期:

var expectedResult = new int[] { 1, 2, 3 }; 
var result = whatever.IntArray("1,2,3"); 

Assert.AreEqual(3, result.Length); 
Assert.AreEqual(expectedResult[0], result[0]); 
Assert.AreEqual(expectedResult[1], result[1]); 
Assert.AreEqual(expectedResult[2], result[2]); 
相關問題