くうと徒然なるままに

ゆるふわ を志向している なごやかです。

asp.net core で body から読み込む Controller method を Unit Test する方法

asp.net core の Controller で body から直接読み込みほげほげすることはよくあると思います。 そんなプログラムのUnit Test の書き方についてです。 Controller に生えている Request プロパティの Body に直接データをぶち込もうとすると 読み取り専用になっているためテスト時に使う値をセットすることができません。

原因

// 読み取り専用になっている
Controller 名.Request.Body 

対策

// Controller Context 経由で値をセットする
Controller名.ControllerContext = new ControllerContext();
Controller名.ControllerContext.HttpContext = new DefaultHttpContext();
Controller名.ControllerContext.HttpContext.Request.Body = new MemoryStream(hoge);

参考URL

stackoverflow.com