2017-10-03 2 views
0

J'ai une application avec deux types d'utilisateurs. Dites, nous avons obtenu l'utilisateurTest avec plusieurs paramètres dans NUnit

  • A (mot de passe: 1234)
  • B (mot de passe: ABCD)

Voici un exemple pour un test:

[TestFixture] 
public class TestCalls 
{ 
    private static RestApiClient client; 

    [SetUp] 
    public void Init() 
    { 
     client = new RestApiClient("http://localhost:1234/"); 
     SetToken("A", "1234"); 
    } 

    [Test] 
    public async Task ExampleTest() 
    { 
     // a test methods 
     var value = await client.ExecuteRequestAsync(...); 

     Assert.That(value, Is.Not.Null.And.Not.Empty) 
     // more assertions 
    } 
} 

SetToken simplement ensembles le jeton d'authentification sur mon adresse RestApiClient.

Le problème est que l'utilisateur A obtient d'autres valeurs que l'utilisateur B (même type de cours, des valeurs différentes, mais une autre base de données)

je pouvais résoudre avec l'aide TestCaseAttribute mais je veux avoir le SetToken dans SetUpAttribute - méthode Init()

[Test] 
[TestCase("A")] 
[TestCase("B")] 
public async Task ExampleTest(string user) 
{ 
    SetToken(user, "1234"); // of course setting right password 

    // a test methods 
    var value = await client.ExecuteRequestAsync(...); 

    Assert.That(value, Is.Not.Null.And.Not.Empty) 
    // more assertions 
} 

Est-il possible d'avoir s.th comme configurations pour NUnit? Donc je pourrais tout faire deux fois (pour les deux utilisateurs)? Ou que pouvais-je faire pour tester les deux utilisateurs? (copier-coller tous les tests ne sont pas une solution)

Répondre

1

trouvé la solution:

Nous pouvons ajouter plusieurs TestFixture -attributes et leur donner des valeurs. Nous devons définir un constructeur pour la classe de test avec la même quantité d'arguments. Ensuite, dans le constructeur, nous assignons ces valeurs aux champs (ici j'utilise des champs readonly privés)

Et puis nous pouvons les utiliser dans le SetUp. NUnit crée automatiquement des cas de test pour les deux utilisateurs.

mon test de classe ressemble à ceci maintenant:

[TestFixture("A", "1234")] 
[TestFixture("B", "ABCD")] 
public class TestCalls 
{ 
    private static RestApiClient client; 

    private readonly string username; 
    private readonly string password; 

    public TestCalls(string username, string password) 
    { 
     this.username = username; 
     this.password = password; 
    } 

    [SetUp] 
    public void Init() 
    { 
     client = new RestApiClient("http://localhost:1234/"); 
     SetToken(this.username, this.password); 
    } 

    [Test] 
    public async Task ExampleTest() 
    { 
     // a test methods 
     var value = await client.ExecuteRequestAsync(...); 

     Assert.That(value, Is.Not.Null.And.Not.Empty) 
     // more assertions 
    } 
}