如何为返回文本编写单元测试.Split

时间:2016-08-11 07:47:40

标签: c# unit-testing

亲爱的所有我试图对这段代码进行单元测试,但它仍然失败。

public string[] StringArray(string text)
{
    return text.Split(',').Select(x => x.Trim()).Select(x => x.Remove(0, 1).Remove(x.Length - 2, 1)).ToArray();
}

我收到错误:

  

System.ArgumentOutOfRangeException:StartIndex不能小于   零。参数名称:startIndex

我对此有点新,并尝试了很多选项,但测试仍然失败。有人有什么建议吗? 这是我写的测试,也许这都是错的,但我认为错误可能在我的输入中? 真的很感激一些帮助。

[TestClass]
public class ContextHelperTests
{
    private ContextHelper _instance;
    private string _removeText = "4, 324, 123";
    private string[] _expectedOutput1 = new string[] { "4", "324", "123"};

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

    [TestMethod]
    public void ContextHelper_ItemsInOutput_RemoveText()
    {
        // Arrange
        var expectedResult = new string[] { "4", "324", "123" };

        // Act
        var result = _instance.StringArray(_removeText);

        // Assert
        Assert.AreEqual("4, 324, 123", result.Length);
        CollectionAssert.AreEqual(result, _expectedOutput1);
    }
}

2 个答案:

答案 0 :(得分:0)

<div class="box" style="width: 100px"></div>

对于“4”,长度为1,因此1-2 = -1。根据{{​​3}}中的例外表,此参数应大于0.您希望从只有一个字符串的字符串中删除2个字符。

答案 1 :(得分:0)

您的测试失败是因为您拥有此Remove(x.Length - 2, 1)且测试数据中包含长度为1的字符串 - "4"。 不确定为什么你在这里使用Remove,试试这个功能

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