3

据我了解,在 Visual Studio 2012 Update 1 及更高版本中,单元测试Traits允许我在测试中设置任意键值对。我已经完成了这项工作,但似乎查询语法存在限制,或者我只是遗漏了一些东西。(在 C# 中,看起来 Traits 可以用方法属性指定。在编写自定义单元测试适配器时,我也看到类上的集合存在TestProperty这个问题。)TraitsMicrosoft.VisualStudio.TestPlatform.ObjectModel.TestCase

假设我有一个 trait Priority,并且它在 set 中有值{1, 2, 3}。如果我定义了另一个 Trait 或者MyID也是数字的,并且 2 是一个有效的 ID,我将如何在测试资源管理器中设置一个查询来查找所有优先级为 2 的测试,而无需同时选择 ID 为 2 的测试?我对语法的理解是那些具有优先级且值为 2 的测试的联合,但这似乎会导致冲突

Trait:"Priority" Trait:"2"

我希望有一个像下面这样的语法,它会考虑到 Trait 键和值之间的差异:

Trait:"Priority=2"

有没有办法做到这一点?我有数以万计的测试,其中包含多达 20 个潜在的感兴趣特征,所以如果我不能这样做,我将不得不{P1, P2, P3}为我可能的优先级以及所有其他特征定义全局唯一值。我正在编写一个自定义单元测试框架,所以如果这是唯一的方法,我可以灵活地做到这一点,但似乎我不应该这样做。

谢谢你。

编辑:这是对C# 示例单元测试项目BankTest 的改编,它显示了冲突的 TestProperty 值:

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);
            }
        }
    }
}

在测试资源管理器中,如果您使用过滤器Trait:"TestID" Trait:"2",它匹配 Priority=2 和 TestID =2。

4

0 回答 0