我正在使用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()”。
答案 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; }
导致测试不再运行。