2017-01-18 1 views
1

Je le contrôleur suivant (simplifié):test de tests unitaires pour Ok Résultat

public async Task<IHttpActionResult> Profile(UpdateProfileModelAllowNulls modelNullable) 
{   
    ServiceResult<ProfileModelDto> result = await _profileService.UpdateProfile(1); 

    return Ok(result);   
} 

Et:

public async Task<ServiceResult<ProfileModelDto>> UpdateProfile(ApplicationUserDto user, UpdateProfileModel profile) 
{ 
    //Do something... 
} 

et le test NUnit suivant:

[Test] 
     public async Task Post_Profile() 
     { 
      var result = _controller.Profile(new UpdateProfileModelAllowNulls() { Email = "[email protected]", DisplayName = "TestDisplay"}) as OkNegotiatedContentResult<Task<<ProfileModelDto>>; 
      Assert.IsNotNull(result);    
     } 

Dans mon NUnit test, j'essaie de vérifier un résultat Ok en utilisant ce tutoriel https://www.asp.net/web-api/overview/testing-and-debugging/unit-testing-with-aspnet-web-api. Mon problème est que je ne peux pas convertir en OkNegotiatedContentResult, je suppose que je ne passe pas dans le bon objet, mais je ne vois pas dans quel objet je devrais passer. Pour autant que je puisse voir, je passe l'objet correct par exemple: OkNegotiatedContentResult<Task<<ProfileModelDto>>;

mais cela ne fonctionne pas.

J'ai aussi essayé:

var result = _controller.Profile(new UpdateProfileModelAllowNulls() { Email = "[email protected]", DisplayName = "TestDisplay"}) as OkNegotiatedContentResult<Task<IHttpActionResult>>; 

Mais cela ne fonctionne pas non plus.

Quelqu'un peut-il aider?

+0

Obtenez-vous des erreurs? –

+0

comme OkNegotiatedContentResult ? –

Répondre

2

contrôleur Vous est Async donc vous devriez l'appeler comme:

var result = (_controller.Profile(new UpdateProfileModelAllowNulls() { Email = "[email protected]", DisplayName = "TestDisplay"}).GetAwaiter().GetResult()) as OkNegotiatedContentResult<ProfileModelDto>; 
1

Comme indiqué par @esiprogrammer, la méthode est async, donc je besoin d'ajouter le awaiter.

j'ai pu résoudre ce problème en procédant comme suit:

var result = _controller.Profile(new UpdateProfileModelAllowNulls() { Email = "[email protected]", DisplayName = "TestDisplay"}); 
    var okResult = await result as OkNegotiatedContentResult<ServiceResult<ProfileModelDto>>; 

J'ai accepté @esiprogrammer réponse comme il a répondu correctement à la question, et aussi devant moi