2016-10-10 8 views
1

私は、MoUでxUnitを使用して私のアプリケーションの単体テストを記述しています。 しかし、セッションを模擬するのは難しいです。.NETコアのHttpContext.Sessionを模擬してください

テスト中のシステムはコントローラアクションであり、テスト対象のメソッドはTempData["UserMessage"]を使用します。これはセッションが初期化されていないため、常にnullです。

これは私が依存関係をどのように模倣しようとしているかのプリントスクリーンです。スロー enter image description here

エラーは、ライン65にあり、 enter image description here

+0

コントローラはダムでなければなりません。代わりにサービスがあり、それらをテストする必要があります。 –

+0

私は私のロジックを保存するサービスを持っています。あなたはそれをまったくテストすべきではないという意味ですか?私の意図は、エラー/正しい値が送信されたときに正しいusermessageを返したかどうかをテストすることでした。 – Rovdjuret

+0

フレームワークがそのことをテストしているだけで、通常は回避しようとしています。 –

答えて

2

次親指の一般的なルールは、「脂肪コントローラー」を有する避けるためです。私のコントローラには、文字通り、対応するサービスに対して実行するために必要なモデルや引数があります。

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); 
} 

はその後、あなたの唯一の懸念は、それがbarIExampleServiceの実装が正しくFooを取得しない与えられるべきである。理想的には、お使いのコントローラのアクションは以下の点を考慮して、エンドポイントを記述する属性の多くの単一の呼び出しです。

しかし、あなたがそれを正しい方法で行うことを完全に嫌っているのなら、それは間違ったやり方をする方法が常にあります。あなたは実際にはmoq-readyのActionContext.HttpContextを探しています。

+0

デビッドに感謝します。 – Rovdjuret

関連する問題