2013-03-13 2 views
0

У меня есть содержимое файла как этотсравнивающие строки в C#

XXX,AAAAAA,B,CC;Cont 123456;2.50;1;1;1;2;0;1;l; 
XXX,AAAAAA,B,CC;Avboo;1.20;1;1;1;2;0;1;l; 
XXX,AAAAAA,B,CC;Dartw esata garle;3.00;1;1;1;2;0;1;ccc; 

файл сохраняется в C: \ Myfile.txt

в моем NUnit теста я пытаюсь создать точные строки как внутри файла содержание и после того, что я хочу, чтобы утверждать, что равны

[Test] 
public void test() 
{  
    string line1 = "XXX,AAAAAA,B,CC;Cont 123456;2.50;1;1;1;2;0;1;l;\r\n"; 
    string line2 = "XXX,AAAAAA,B,CC;Avboo;1.20;1;1;1;2;0;1;l;\r\n"; 
    string line3 = "XXX,AAAAAA,B,CC;Dartw esata garle;3.00;1;1;1;2;0;1;ccc;\r\n";  
    string expected = string.Concat(line1,line2,line3); 
    var fileContent = File.ReadAllText(@"C:\myFile.txt"); 
    Assert.AreEqual(fileContent, expected); 
} 

Althout это похоже, что это должно быть точные строки я получаю ошибку

Excpected длина строки 149, но был 154. Строки различаются по индексу 86

+11

Вы посмотрели на них в отладчике, чтобы узнать, какая разница в индексе 86? – millimoose

+0

Вы проверили, что происходит из 'File.ReadAllText()'? –

+1

Возможно, вам нужно добавить символ '@' перед вашими ожидаемыми строками, т. Е. 'String line1 = @" XXX ... ";' – oleksii

ответ

4

Что делать, если вы удалите последний разрыв строки:

string line3 = "XXX,AAAAAA,B,CC;Dartw esata garle;3.00;1;1;1;2;0;1;ccc;"; 

Я думаю, что конец текстового файла не разрыв строки.

+0

Это самая возможная причина разницы в длине. И что касается несоответствия, то это странный символ (буква?) 'L', который может выглядеть как цифра' 1', и вы, возможно, были опечалены. – Sinatr

+0

Это хороший и правильный ответ, характерный для ошибки в тесте. Но на самом деле не рассматривается основная проблема - http://stackoverflow.com/questions/15385301/comparing-strings-in-c-sharp/15385736#15385736 – LiverpoolsNumber9

2

использования Environment.NewLine вместо \r\n.

+3

Может ли кто-нибудь прокомментировать его нижестоящий? –

0

У вас есть экстренного NewLineChar в line3, следующий код работает правильно:

[Test] 
public void test() 
{ 
    string line1 = "XXX,AAAAAA,B,CC;Cont 123456;2.50;1;1;1;2;0;1;l;\r\n"; 
    string line2 = "XXX,AAAAAA,B,CC;Avboo;1.20;1;1;1;2;0;1;l;\r\n"; 
    string line3 = "XXX,AAAAAA,B,CC;Dartw esata garle;3.00;1;1;1;2;0;1;ccc;"; 
    string expected = string.Concat(line1, line2, line3); 
    var fileContent = File.ReadAllText(@"C:\myFile.txt"); 
} 

Также вы можете добавить дополнительный NewLineChar в вашем myfile.txt

0

Другого подхода.

var actual = File.ReadAllLines(@"c:\abc.txt"); 
var expected = new List<string>(); 
expected.Add("line1"); 
expected.Add("line2"); 
expected.Add("line3"); 
Assert.AreEqual(expected, actual); 

Или вы можете сделать цикл for в списке и проверить каждую строку по одному.

0

Здесь есть много хороших ответов о том, как лучше провести тест. Но на самом деле есть два фундаментальных вопроса.

  1. это не юнит тест, это тест интеграции
  2. Если вы не знаете, что выход .NET Строка файла в первую очередь, тест не имеет смысла. Сначала вам нужно это узнать.

Чтобы сделать это, я бы первым отлаживать тест и скопировать вывод File.ReadAllText("[filename]"); Затем вставьте этот вывод в свой Assert. метод/с.

Один из основных ключей к тестированию на единицу/интеграцию - это точно знать, что обе стороны вашего теста :. Без этого вы могли бы не беспокоиться.

Кроме того, что вы тестируете?

1

Сообщение, которое вы получили явно:

Expected string length 149 but was 154. Strings differ at index 86

Это указывает на \r\n месте; Поэтому я подозреваю, что ваш файл содержит \n, а не \r и \n вместе.

        position 86: \r found | 
                 v 
...;1;1;1;2;0;1;l;XXX,AAAAAA,B,CC;Avboo;1.20;1;1;1;2;0;1;l;XXX,AAAAAA,B,CC; 
  • По этой причине, файл comparaison отличается тем, что существует неожиданное \ г в позиции 86.

Так у вас есть теперь 3 дополнительных символов.

Поскольку ваш текстовый файл имеет, вероятно, не заканчивается \r\n, теперь у вас есть еще один дополнительные символы:

  • Вот причина, почему у вас есть в общей сложности 5 дополнительных символов (4 + дополнительный полукокса я не сделал еще пятно): 154 вместо 149.
Смежные вопросы