在调用执行程序 'executor://mstestadapter/v1' 时发生了异常:未将对象引用设置为对象的实例。

5 浏览
0 Comments

在调用执行程序 'executor://mstestadapter/v1' 时发生了异常:未将对象引用设置为对象的实例。

我们在项目中使用Visual Studio 2012和Team Foundation Server 2010。由于我们使用了Microsoft Fakes,因此我们无法使用Team Build 2010的起始测试功能。我创建了一个构建活动,调用VSTest.Console.exe并传递测试程序集。这种方法对我们来说一直运行良好。然而,在最近一次提交后,当执行Vstest.console.exe时,我们遇到了以下错误:

错误:在调用执行程序'executor://mstestadapter/v1'时发生异常:对象引用未设置为对象的实例。

我将二进制文件复制到我的本地机器上,并且能够再次获得错误。有趣的是,在提交之前我们运行了一个开发构建,该构建使用相同的vstest.console.exe和参数运行,而且运行正常。我在我的机器上有两个文件夹,一个调用正常,另一个不正常。编译后的程序集大小看起来相同,并没有太多差异可以说明问题。

我试过使用进程监视器,但除了该进程返回退出代码1之外,没有找到任何明显的问题。有人对这个错误了解多吗?我有没有办法从我的测试运行中获取更多信息?

谢谢,

Hamid

0
0 Comments

在Visual Studio中,选择Test -> Test Settings -> Default Processor Architecture -> X64,这个方法对我有效。虽然可能不是所有人的问题都能解决,但希望能对一些人有所帮助。

0
0 Comments

在使用Visual Studio 2017时,我遇到了同样的错误信息。我使用了新的MSTest.Framework和MSTest.TestAdapter(以便使用Live Unit Testing)。结果发现,我在解决方案中使用了多个版本的这些包。将它们统一到最新版本解决了问题。

这是我的问题。具体来说,我需要先清理再构建。我有冗余的程序集。

这是我在使用VS 2017的Dev Azure时遇到的问题。

An exception occurred while invoking executor 'executor://mstestadapter/v1': Object reference not set to an instance of an object.

问题原因:在使用Visual Studio 2017的过程中,使用了MSTest.Framework和MSTest.TestAdapter这两个包,并且将它们的多个版本引入了解决方案中,导致冲突。

解决方法:统一使用最新版本的MSTest.Framework和MSTest.TestAdapter,并进行清理和构建操作,以消除冗余的程序集。这样就能解决掉"An exception occurred while invoking executor 'executor://mstestadapter/v1': Object reference not set to an instance of an object."这个错误。

0
0 Comments

问题出现的原因是在运行测试时,有些测试程序集针对.NET 4.0,而另一些测试程序集则针对.NET 4.5。同时,我们使用了Entity Framework 5.0。当试图在同一个测试进程(vstest.console.exe)中运行针对不同.NET框架版本和使用了Entity Framework 5.0的程序集时,就会出现这个错误。

我认为这与Entity Framework 5.0的两个版本(net40和net45)的发布方式有关。一旦在进程中加载了一个版本的库,就无法加载另一个版本,这导致了错误的出现。

解决方法是将测试程序集分成两组,一组针对.NET 4.0,另一组针对.NET 4.5。然后分别运行这两组测试程序集,以避免在同一个测试进程中加载不同版本的库导致的错误。

以下是解决方法的示例代码:

// 针对.NET 4.0的测试程序集
[TestClass]
public class TestsNet40
{
    // 测试方法
    [TestMethod]
    public void TestMethod1()
    {
        // 测试代码
    }
}
// 针对.NET 4.5的测试程序集
[TestClass]
public class TestsNet45
{
    // 测试方法
    [TestMethod]
    public void TestMethod2()
    {
        // 测试代码
    }
}

通过将测试程序集分成两组,分别针对不同的.NET版本运行,可以避免加载不同版本的库导致的错误。

0