0

このようなファイルコンテンツがあります

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

正確な文字列である必要があるように見えますが、エラーが発生しています

文字列の長さは 149 であると予想されていましたが、154 でした。文字列はインデックス 86 で異なります

4

6 に答える 6

4

最後の改行を削除するとどうなりますか?

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

テキストファイルの終わりは改行ではないと思います。

于 2013-03-13T12:32:38.257 に答える
2

Environment.NewLineの代わりに使用し\r\nます。

于 2013-03-13T12:28:20.057 に答える
1

あなたが得たメッセージは明白です:

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

場所を指してい\r\nます。したがって、あなたのファイルには\nand not \rand \ntogether が含まれていると思われます。

                                  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;
  • このため、86 の位置に予期しない \r があるため、ファイルの比較が異なります。

したがって、3 つの余分な文字があります。

あなたのテキスト ファイルはおそらく で終わっていないので、\r\nもう 1 文字追加されます。

  • これが、合計 5 つの余分な文字 (4 + まだ見つけていない余分な文字) がある理由です: 149 ではなく 154 です。
于 2013-03-13T12:50:59.583 に答える
0

追加のNewLineCharline3あり、次のコードは正しく機能します。

[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

于 2013-03-13T12:34:14.023 に答える
0

ここには、テストをどのように行うかについての良い答えがたくさんあります。しかし実際には、この質問には 2 つの根本的な問題があります。

  1. これは単体テストではなく、統合テストです
  2. そもそもファイルの .NET String 出力が何であるかを知らない場合、テストは無意味です。まずこれを見つける必要があります。

これを行うには、最初にテストをデバッグし、出力をコピーしてから、この出力をメソッドFile.ReadAllText("[filename]");に貼り付けます。Assert.

ユニット/統合テストの主な鍵の 1 つは、テストの両側が何であるかを正確に知ることです。これがなければ、気にしない方がいいかもしれません。

また、何をテストしていますか?

于 2013-03-13T12:45:24.327 に答える