私が理解していることから、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 の両方に一致します。