vendredi 10 mars 2017

How to Test controller method which returns Task

I have wen Api controller method like given below SessionId is of type 'string'

    [HttpPost]
    [Route("init")]
    [ApiMeter("search_init")]
    public async Task<IHttpActionResult> InitiateAsync(SearchInitRequest query,
        CancellationToken cancellationToken)
    {
        Validations.EnsureValid(query, new SearchRequestValidator());
        string sessionId = await Service.InitiateSearchAsync(query, cancellationToken);
        return Ok(new { sessionId });
    }

And I have test case like below

    [Fact]
    public void GetSearchInit_Success_Valid()
    {
        var mockCarService = new Mock<ICarService>();

        using (new AmbientContextScope(GetCarCallContext()))
        {
            var request = Data.DataProvider.TestDataProvider.GetJsonResult<CarSearchInitRequest>(
           SearchInitScenarioRequests.CarSearchInitSuccess);
            var response = Data.DataProvider.TestDataProvider.GetResponse<CarSearchInitResponse>(
           SearchInitScenarioResponse.CarSearchInitSuccess);

            mockCarService.Setup(f => f.InitiateSearchAsync(request, CancellationToken.None))
                .Returns(Task.FromResult(response.SessionId));

            SearchController controller = new SearchController(mockCarService.Object);
            var result = controller.InitiateAsync(request, CancellationToken.None).Result;
            var status = result as OkNegotiatedContentResult<string>;
            Assert.NotNull(status.Content);

        }
    }

in this test case I am getting status as null. though while debugging I can see there is SessionId property inside status.Content but as this is of anonymous type I am not able to read that value. I have also tried with

var status = result as OkNegotiatedContentResult<object>;

still no luck

Aucun commentaire:

Enregistrer un commentaire