我在 Visual Studio 中有一个 C# 测试项目。此项目的输出路径设置为“..\bin\”,即解决方案级别的 bin 目录。我在我的项目中有这样的测试:
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class TestClass
{
private TestContext context { get; set; }
[ClassInitialize]
public static void ClassInitialize(TestContext c)
{
//generate some test data xml
XDocument.Save("|DataDirectory|\\TestProjectData\\data.xml");
}
[TestMethod]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\TestProjectData\\data.xml", "testcase", DataAccessMethod.Random)]
public void TestMethod1()
{
Console.WriteLine("test case run");
}
}
我已经成功运行了这个测试,并且我收到了作为数据源的测试结果——我看到了每个行号的测试结果等。但是,我无法再次成功执行测试用例。我开始收到错误:
Result Message: The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: Object reference not set to an instance of an object.
当我尝试调试测试时,我在 TestMethod 和 ClassInitialize 中设置了断点。但是,似乎不再调用 ClassInitialize 方法。什么会导致只能选择性地调用 ClassInitialize 方法?我的理解是,它总是会在调用任何测试方法之前被调用,而且我也曾成功地看到过这项工作,然后才开始失败。
由于这一次成功,我尝试了重建,清理解决方案,重新启动VS,重新启动计算机等,希望在第一次成功运行期间创建的某些文件将被删除。但是,仅执行一次后测试继续失败。
我看过诸如
当我在谷歌上搜索这个问题时,围绕这个主题有一个共同点——建议通常总是围绕使用MSTestHacks 展开。但是,我想知道具体是什么导致了这个问题。是否有一些 app.config、Visual Studio 设置等允许它在不需要第三方库的情况下工作。这确实适用于图书馆这一事实向我表明,这个问题有答案。也许通过谷歌搜索并不容易找到。