私は、MoUでxUnitを使用して私のアプリケーションの単体テストを記述しています。 しかし、セッションを模擬するのは難しいです。.NETコアのHttpContext.Sessionを模擬してください
テスト中のシステムはコントローラアクションであり、テスト対象のメソッドはTempData["UserMessage"]
を使用します。これはセッションが初期化されていないため、常にnullです。
これは私が依存関係をどのように模倣しようとしているかのプリントスクリーンです。スロー
私は、MoUでxUnitを使用して私のアプリケーションの単体テストを記述しています。 しかし、セッションを模擬するのは難しいです。.NETコアのHttpContext.Sessionを模擬してください
テスト中のシステムはコントローラアクションであり、テスト対象のメソッドはTempData["UserMessage"]
を使用します。これはセッションが初期化されていないため、常にnullです。
これは私が依存関係をどのように模倣しようとしているかのプリントスクリーンです。スロー
次親指の一般的なルールは、「脂肪コントローラー」を有する避けるためです。私のコントローラには、文字通り、対応するサービスに対して実行するために必要なモデルや引数があります。
public class MyThinController : Controller
{
[
HttpGet,
Route("api/[controller]/foos/{bar}"),
Authorize(Policy = nameof(Policies.StackoverflowOp))
]
public Task<IActionResult> GetFoo([FromRoute] Bar bar,
[FromServices] IExampleService service)
=> service.GetAsync(bar);
}
はその後、あなたの唯一の懸念は、それがbar
IExampleService
の実装が正しくFoo
を取得しない与えられるべきである。理想的には、お使いのコントローラのアクションは以下の点を考慮して、エンドポイントを記述する属性の多くの単一の呼び出しです。
しかし、あなたがそれを正しい方法で行うことを完全に嫌っているのなら、それは間違ったやり方をする方法が常にあります。あなたは実際にはmoq-readyのActionContext.HttpContext
を探しています。
デビッドに感謝します。 – Rovdjuret
コントローラはダムでなければなりません。代わりにサービスがあり、それらをテストする必要があります。 –
私は私のロジックを保存するサービスを持っています。あなたはそれをまったくテストすべきではないという意味ですか?私の意図は、エラー/正しい値が送信されたときに正しいusermessageを返したかどうかをテストすることでした。 – Rovdjuret
フレームワークがそのことをテストしているだけで、通常は回避しようとしています。 –