私はテストにかなり慣れておらず、コントローラーテストを次のように書いています。
var result = myController.Create(It.IsAny<int>());
Assert.IsInstanceOfType(result, typeof(ViewResult));
Assert.AreEqual(string.Empty, ((ViewResult)result).ViewName, "Default view expected.");
Assert.IsInstanceOfType(((ViewResult)result).ViewData.Model, typeof(FooBarCreateEditViewModel));
これは正常に機能しますが、テスト2と3のキャストを実行する必要があるという点で、読みやすくありません。別のアプローチとして、次のことを行うことができます。
var result = (ViewResult)myController.Create(It.IsAny<int>());
Assert.AreEqual(string.Empty, result.ViewName, "Default view expected.");
Assert.IsInstanceOfType(result.ViewData.Model, typeof(FooBarCreateEditViewModel));
これもうまくいくようで、私の意見ではもっと読みやすくなっています。それに関する私の問題は、ジョブを実行するためのアサーションを明示的に定義するのではなく、IsInstanceOfTypeテストを実行するためにテストの「act」部分に依存していることです。
それで、私の2番目のアプローチは続行しても大丈夫ですか?メソッドが別のタイプを返す場合、キャストに依存してエラーをスローする際に問題が発生する可能性がありますか?