0

次のメソッドがあります。これは拡張メソッドであり、任意のStreamオブジェクトから呼び出すことができます。このメソッドは、Stream の正確なコンテンツを別の Stream にコピーする必要があります。

public static void CopyTo(this Stream input, Stream output)
{
   const int size = 10;
   int num;
   var buffer = new byte[size];
   input.Position = 0;
   while ((num = input.Read(buffer, 0, buffer.Length)) != 0)
   {
      output.Write(buffer, 0, num);
   }
}

元のストリームのコンテンツが最終的なストリームのコンテンツと等しいことを確認する簡単なテストを 1 つ作成しました。

[TestMethod]
public void StreamWithContentShouldCopyToAnotherStream()
{
    // arrange
    var content = @"abcde12345";
    byte[] data = Encoding.Default.GetBytes(content);
    var stream = new MemoryStream(data);
    var expectedStream = new MemoryStream();
    // act
    stream.CopyTo(expectedStream);
    // assert
    expectedStream.Length
       .Should()
       .Be(stream.Length, "The length of the two streams should be the same");
}

残念ながら、内容がまったく同じかどうかを確認していないため、このメソッドの一部のみを取り上げています。また、dotCover は、コードの最初の部分がまったくカバーされていないことを示しています。これは次のとおりです。

コードカバレッジ結果

私の目標は、このメソッドの 100% のコード カバレッジです。

4

1 に答える 1

1

おそらく、コードは拡張メソッドを呼び出しておらず、代わりにStream.CopyTo(Stream)メソッドを呼び出していますか?

名前の衝突を避けるために、拡張メソッドの名前を変更してみてください。

于 2013-01-14T06:11:57.893 に答える