用于将逗号分隔的int字符串转换为int数组

时间:2016-08-01 08:44:32

标签: c# unit-testing

我是新手,所以我真的不知道我是否正确行事。 我想测试的代码是:

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

2 个答案:

答案 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]);

答案 1 :(得分: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.部分更具可读性和更清晰