2017-10-03 2 views
0

私は2種類のユーザーを持つアプリケーションを手に入れました。単にNUnitでの複数の設定によるテスト

[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セット:

  • B(パスワード:ABCD)
  • これはテストのための例です:私たちはユーザー

    • A(1234パスワード)を得た、と言います認証トークンはRestApiClient -insanceにあります。問題は、ユーザAがユーザB(もちろん、同じタイプの、異なる値が、他のデータベース)

      以外の値を取得することである

      私はTestCaseAttributeを使用してそれを解決することができますが、私はSetUpAttributeSetTokenを持つようにしたいです - 方法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 
      } 
      

      はNUnitのためのs.thのような構成を持っているすべての可能性はありますか?だから私はすべてを2回(両方のユーザーに)走らせることができましたか? また、両方のユーザーをテストするにはどうすればよいですか? (コピー&ペーストすべてのテストが解決策ではありません)

    答えて

    1

    は解決策を見つけた:

    我々は、複数のTestFixture -attributesを追加し、それらに値を与えることができます。 同じ量の引数でテストクラスのコンストラクタを定義する必要があります。 次に、コンストラクタでこれらの値をフィールドに割り当てます(ここで私は専用の読み取り専用フィールドを使用しています)

    そして、それらをSetUpで使用することができます。

    NUnitは自動的に両方のユーザーのテストケースを作成します。

    私のテストクラスは次のようになります。

    [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 
        } 
    } 
    
    関連する問題