2016-08-11 5 views
0

Дорогой, все, что я пытаюсь выполнить для тестирования этого кода, но он продолжает терпеть неудачу.Как написать единичный тест для текста с возвратом.Split

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 cannot be less than zero. Parameter name: 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); 
    } 
} 
+0

Ваш раскол выглядит намного сложнее, чем необходимо. 'string.Split (", ")' на самом деле будет достаточно для вашего тестового примера. – nbokmans

ответ

0
.Remove(x.Length - 2, 1) 

В "4" длина равна 1, поэтому 1-2 = -1. Согласно таблице исключений в documentation for String.Remove, этот параметр должен быть больше 0. Вы хотели сбросить 2 символа из строки, содержащей только одну.

+0

Итак, этот тестовый ввод неверен («4, 324, 123»)? –

+0

Если вы хотите отбросить первый и последний символы (я предполагаю, что это то, что «x.Remove (0, 1) .Remove (x.Length - 2, 1)» для), то да. Для ввода потребуется не менее 2 символов. – adhie

+1

@ Shan's Ваш код не может обрабатывать этот ввод, но если он не соответствует вашему коду –

0

Ваш тест не проходит, потому что у вас есть это Remove(x.Length - 2, 1), и в ваших тестовых данных у вас есть строка с длиной = 1 - это "4". Не знаете, почему вы используете Удалить здесь, попробуйте эту функцию

public string[] StringArray(string text) 
{ 
    return text.Split(',').Select(x => x.Trim()).ToArray(); 
} 
Смежные вопросы