20

nunit を使用して単体テストを作成していますが、このコードはすべて実行時に正常に動作します。

以下に、コントローラーが戻ったときに呼び出されるこの保護されたHttpResponseMessageコードがあります。

ただし、エラー:

「値をnullにすることはできません。パラメータ名: リクエスト」と表示されています。

そして、リクエストを確認すると、実際にはnull.

質問: を返すように単体テストをコーディングするにはどうすればよいHttpResponseMessageですか?

エラーは次の行に表示されます。

  protected HttpResponseMessage Created<T>(T result) => Request.CreateResponse(HttpStatusCode.Created, Envelope.Ok(result));

これが私のコントローラーです:

    [Route("employees")]
    [HttpPost]
    public HttpResponseMessage CreateEmployee([FromBody] CreateEmployeeModel model)
    {
        //**Some code here**//

        return Created(new EmployeeModel
        {
            EmployeeId = employee.Id,
            CustomerId = employee.CustomerId,
            UserId = employee.UserId,
            FirstName = employee.User.FirstName,
            LastName = employee.User.LastName,
            Email = employee.User.Email,

            MobileNumber = employee.MobileNumber,
            IsPrimaryContact = employee.IsPrimaryContact,
            OnlineRoleId = RoleManager.GetOnlineRole(employee.CustomerId, employee.UserId).Id,
            HasMultipleCompanies = EmployeeManager.HasMultipleCompanies(employee.UserId)
        });
    }
4

3 に答える 3

4

HttpRequestMessageController を新規作成するときに、 Request プロパティ ( ) をインスタンス化または割り当てていないことが原因だと思います。単体テストを介して Api メソッドを呼び出す前に、リクエストを指定する必要があると思います。

HttpConfiguration構成 ( )が必要な場合もあります。

sut = new YourController()
    {
        Request = new HttpRequestMessage {
            RequestUri = new Uri("http://www.unittests.com") },

        Configuration = new HttpConfiguration()
    };

それがうまくいくかどうか教えてください。

于 2016-08-14T15:54:25.413 に答える
2

また、コントローラーにインジェクションがある場合は、次のことができます。

var controller= new MyController(injectionA, injectionB, injectionC)
{
    Request = new HttpRequestMessage(),
    Configuration = new HttpConfiguration()
};

それらはすべて、わかりやすい公式ドキュメントで見つけることができます。

于 2019-06-28T01:25:00.210 に答える