2017-10-18 36 views
0

J'essaie d'utiliser ValueSourceAttribute pour mes tests.Le sourceName spécifié sur un ValueSourceAttribute doit faire référence à un champ, une propriété ou une méthode statique non nul.

Voici un exemple

[Test] 
     public async Task TestDocumentsDifferentFormats(
      [ValueSource(nameof(Formats))] string format, 
      [ValueSource(nameof(Documents))] IDocument document) 
     { 

La chose intéressante est que la liste Formats (premier argument) fonctionne parfaitement, mais il ne peut pas résoudre le deuxième argument, même si elle définit de la même manière.

Voici comment je définissais les documents de la liste statique

public class DocumentFactory 
    { 
     public static readonly List<IDocument> Documents= 
      new List<IDocument> 
      { 
       // Init documents 
      }; 
    } 

Mais quand je tente d'exécuter mes tests, il génère une erreur.

The sourceName specified on a ValueSourceAttribute must refer to a non null static field, property or method. 

Qu'est-ce qui peut causer ce problème? Je vous serais reconnaissant pour toute l'aide apportée.

+0

Vous devez mentionner que ce problème se produit uniquement lorsque la propriété 'Documents' est déclarée dans une autre classe. – Fabio

+0

@Fabio oui il est déclaré dans une autre classe, est-il possible de résoudre ce problème? – bxfvgekd

Répondre

1

Si les valeurs sont définies dans une autre classe, vous devez fournir son type trop comme paramètre pour l'attribut

[Test] 
public void TestOne(
    [ValueSource(nameof(Formats))] string format, 
    [ValueSource(typeof(DocumentFactory), nameof(DocumentFactory.Documents))] IDocument document) 
{ 
     document.Should().NotBeNull(); 
} 

Sans fournir un type, NUnit utilisera le type de classe actuelle comme type par défaut, c'est pourquoi Formats œuvres.

+0

Fonctionne comme un charme. Merci d'avoir signalé l'erreur. – bxfvgekd