2017-09-28 6 views
2

Alors que mes fonctions de contrôleur de MVC correctement, je reçois une erreur de syntaxe dans mon test unitaire sur la ligne « assert » pour .NameComment accéder résultat du champ de contrôleur de retour dans le noyau

résultat IAction ne contient pas de définition pour « Name » ...

Si je passe la souris sur « résultat » en mode débogage je peux voir les données dans la variable résultat (résultat> Modèle> Nom). J'ai essayé d'y accéder avec Result.Model.Name mais c'est aussi une erreur de syntaxe.

test Unité:

[Fact] 
    public async Task TestGetNameById() 
    { 
     string expectedName = "Component"; 

     using (var context = GetContextWithData()) 
     using (var controller = new AssetTypesController(context)) 
     { 
      var result = await controller.Details(2); 
      Assert.Equal(expectedName, result.Name); 
     } 
    } 

Action du contrôleur:

public async Task<IActionResult> Details(int? id) 
    { 
     if (id == null) 
     { 
      return NotFound(); 
     } 

     var assetType = await _context.AssetType 
      .SingleOrDefaultAsync(m => m.AssetTypeId == id); 
     if (assetType == null) 
     { 
      return NotFound(); 
     } 

     return View(assetType); 
    } 

Modèle

public class AssetType 
{ 
    [DatabaseGenerated(databaseGeneratedOption: DatabaseGeneratedOption.Identity)] 
    [Key] 
    public int AssetTypeId { get; set; } 
    [Required] 
    public string Name { get; set; } 
} 

Répondre

2

C'est parce que IActionResult n'est pas un type de AssetType.

Essayez quelque chose comme ceci:

[Fact] 
public async Task TestGetNameById() 
{ 
    string expectedName = "Component"; 

    using (var context = GetContextWithData()) 
    { 
     var controller = new AssetTypesController(context); 
     var result = await controller.Details(2) as ViewResult; 
     var assetType = (AssetType) result.ViewData.Model; 
     Assert.Equal(expectedName, assetType.Name); 
    } 
} 
+0

Excellent, merci. Je ne comprends pas pourquoi je ne pourrais pas faire 'AssetType assetType = result.ViewData.Model' - avez-vous aussi une idée pourquoi ReSharper me donne un avertissement pour le "résultat" dans result.ViewData.Model disant "système possible .NullReferenceException "? – egmfrs

+0

@egmfrs Probablement parce que controller.Details (2) pourrait être retourné comme nul. – 12seconds

+0

Passage à (ViewResult) wait controller.Details (2); Correction de l'avertissement de syntaxe, mais le test unitaire a échoué. Je vais juste laisser tel quel. – egmfrs