在.NET-core中找不到TestContext类

时间:2019-07-02 18:26:48

标签: c# unit-testing .net-core

我正在使用C#将代码从.NET-Framework重构到.NET-Core。当我对应该对列表进行排序的方法进行简单测试时,会出现此错误:

  

“ System.MissingMethodException:找不到方法:'System.Collections.IDictionary Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.get_Properties()'。”

我检查了对其他必要名称空间的引用。我在网上搜索错误,并且意识到.NET Core中尚未提供TestContext类!我可以使用另一种方法或替换库吗?谢谢。

        [TestMethod]
        public void TestMethod()
        {
            // Arrange
            // Grab an arbitrary start time.
            Time startTime = Time.Now;

            List<TimeValue> values = new List<TimeValue>
            {
                // Make sure that second timestamp comes before the first 
                   timestamp
                new TimeValue(startTime.PlusMinutes(1)),
                new TimeValue(startTime)
            };

            // Ensure that this is sorted in ascending order of time.
            List<TimeValue> expectedValues = values.OrderBy(value => 
            value.Timestamp).ToList();
            CollectionAssert.AreNotEqual(expectedValues, values);

            // Act
            SortArray myObj = new SortArray(values);

            // Assert
            CollectionAssert.AreEqual(expectedValues, SortArray.Values);
        }

我希望TestMethod能够运行,但无法运行,并给我以下错误:

  

“ System.Collections.IDictionary Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.get_Properties()”。

3 个答案:

答案 0 :(得分:2)

您可以使用的替代方法是xUnit。它是一个开源工具,您可以将其与.NET Core一起使用。

Microsoft提供了tutorial关于如何使用.NET Core xUnit的信息。

另一种可能性是“ dotnet测试”,它是Microsoft与.NET Core兼容的单元测试工具。

答案 1 :(得分:0)

尝试将以下属性添加到测试类:

public TestContext TestContext { get; set; }

通常,MSTest似乎没有得到积极发展。 Visual Studio附带有.NET上的Microsoft keeps it working(甚至.NET Core上还有somewhat),但他们似乎在内部使用xUnit因此,考虑将您的测试切换为xUnit也很有意义。

答案 2 :(得分:0)

当您提供类型为TestContext的字段时,此方法有效。当您将其设置为属性时,该功能将无效。以下按照here所述与.NET Core 3.1一起使用。

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace TimeLogger.Tests
{
    [TestClass]
    public class YourTestClass
    {
        private static TestContext Context;

        [ClassInitialize]
        public static void InitClass(TestContext testContext)
        {
            Context = testContext;
        }

        [TestMethod]
        public void Test_1()
        {
            Assert.IsTrue(true);
        }

        [TestMethod]
        public void Test_2()
        {
            Assert.IsTrue(true);
        }
    }
}

但是更改后

    private static TestContext Context;

进入

    private static TestContext Context { get; set; }

导致测试不再运行。