プログラム系統備忘録ブログ

記事中のコードは自己責任の下でご自由にどうぞ。

読み取り不可なStreamの作り方

背景

  • 某ファイルフォーマット用のBinaryReaderクラスを作った。
  • コンストラクタで受けるStreamがunreadableならArgumentExceptionを投げている。
  • これの単体テストを書きたい。

実現方法

Stream.CanRead プロパティ (System.IO) | Microsoft LearnはClose後ならfalseを返すので、それを利用する。

[TestMethod]
public void コンストラクタに読み取り不可のStreamを渡すと例外を送出する()
{
    using (var stream = new MemoryStream())
    {
        stream.Close();
        if (stream.CanRead) { Assert.Inconclusive("ストリームが読み込み不可になっていません。"); }

        AssertEx.Throws<ArgumentException>(() => new MyBinaryReader(stream));
    }
}

ここで使っているAssertExは、Chaining Assertionで提供されているクラスです。
Is〜系統が引数の型補完をさせてくれるだけでも便利です、オススメ。(唐突な宣伝)