3

私が理解していることから、Visual Studio 2012 Update 1 以降では、単体テストの特徴を使用して、テストに任意のキーと値のペアを設定できます。私はそれを機能させましたが、クエリ構文に制限があるか、何か不足しているようです。TestProperty(C# では、メソッド属性で Traits を指定できるようです。カスタム ユニット テスト アダプターを作成するときに、クラスのTraitsコレクションにもこの問題が見られます。)Microsoft.VisualStudio.TestPlatform.ObjectModel.TestCase

の特性が 1 つPriorityあり、 set に値があるとします{1, 2, 3}。別の特性を定義するかMyID、それも数値であり、2 が有効な ID である場合、テスト エクスプローラーでクエリを設定して、ID 2 のテストを取得せずに優先度 2 のすべてのテストを検索するにはどうすればよいでしょうか? 構文の私の理解は、優先度があり、値が 2 であるこれらのテストの結合に対するものですが、これは衝突を引き起こすようです

Trait:"Priority" Trait:"2"

Trait のキーと値の違いを考慮した、次のような構文を期待していました。

Trait:"Priority=2"

それを行う方法はありますか?最大 20 の潜在的な関心のある特性を含む何万ものテストがあるため、それができない場合は{P1, P2, P3}、考えられる優先順位や他のすべての特性について、グローバルに一意の値を定義する必要があります。私はカスタムの単体テスト フレームワークを書いているので、それが唯一の方法であれば柔軟にそれを行うことができますが、そうする必要はないようです。

ありがとうございました。

編集:これは、衝突する TestProperty 値を示すC# サンプル ユニット テスト プロジェクトBankTest の適応です。

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using BankAccountNS;

namespace BankTest
{
    [TestClass]
    public class BankAccountTests
    {
        // unit test code
        [TestMethod]
        [TestProperty("TestID", "1")]
        [TestProperty("Priority", "2")]
        public void Debit_WithValidAmount_UpdatesBalance()
        {
            // arrange
            double beginningBalance = 11.99;
            double debitAmount = 4.55;
            double expected = 7.44;
            BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance);

            // act
            account.Debit(debitAmount);

            // assert
            double actual = account.Balance;
            Assert.AreEqual(expected, actual, 0.001, "Account not debited correctly");
        }

        //unit test method
        [TestMethod]
        [TestProperty("TestID", "2")]
        [TestProperty("Priority", "1")]
        [ExpectedException(typeof(ArgumentOutOfRangeException))]
        public void Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange()
        {
            // arrange
            double beginningBalance = 11.99;
            double debitAmount = -100.00;
            BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance);

            // act
            account.Debit(debitAmount);

            // assert is handled by ExpectedException
        }

        [TestMethod]
        [TestProperty("TestID", "3")]
        [TestProperty("Priority", "0")]
        public void Debit_WhenAmountIsGreaterThanBalance_ShouldThrowArgumentOutOfRange()
        {
            // arrange
            double beginningBalance = 11.99;
            double debitAmount = 20.0;
            BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance);

            // act
            try
            {
                account.Debit(debitAmount);
            }
            catch (ArgumentOutOfRangeException e)
            {
                // assert
                StringAssert.Contains(e.Message, BankAccount. DebitAmountExceedsBalanceMessage);
            }
        }
    }
}

テスト エクスプローラーで filter を使用するTrait:"TestID" Trait:"2"と、Priority=2 と TestID =2 の両方に一致します。

4

0 に答える 0