23

在我的 Visual Studio 2012 解决方案中,我有一个用于单元测试 C++/CLI 代码的 C# 项目,例如

...
using System.IO;
using Stuff;

namespace MyCLIClassTest
{
    [TestClass]
    public class MyCLIClassTest
    {
        public MyCLIClassTest() {}

        [ClassInitialize]
        public static void Setup(TestContext testContext) 
        {
        }

        [TestMethod]
        public void LibraryAccessTest()
        {
            ...
        }
    }
}

现在,C# 测试全部失败,并显示类似“Method MyCLIClassTest.MyCLIClassTest.ClassInitialize 的签名错误。该方法必须是静态的、公共的、不返回值并且应该采用 TestContext 类型的单个参数。”

删除 ClassInitializer 后,我得到“无法为类 MyCLIClassTest.MyCLIClassTest 设置 TestContext 属性。错误:System.ArgumentException:'Microsoft.VisualStudio.TestPlatform.MSTestFramework.TestContextImplementation'类型的对象无法转换为'Microsoft.VisualStudio.TestTools'类型.UnitTesting.TestContext'..

4

4 回答 4

26

我使用了较旧的单元测试框架版本的 DLL。发生这种情况是因为该项目最近迁移到 VS2012。

因此,在测试项目下的解决方案资源管理器中,您可以找到“参考”。右键单击它并选择“添加参考...”以打开参考管理器。搜索“unittest”并检查版本号为 10.1.0.0 的 Microsoft.VisualStudio.QualityTools.UnitTestFramework。取消选中此程序集的所有其他版本。单击确定关闭管理器。

在此处输入图像描述

于 2013-02-07T12:32:26.153 回答
16

从重复问题复制的替代答案:为什么 ClassInitialize 修饰的方法使我的所有测试都失败?

装饰方法应该是静态的[ClassInitialize],并且只接受一个 TestContext 类型的参数:

[ClassInitialize]
public static void SetupAuth(TestContext context)
{
    var x = 0;
}
于 2014-03-19T01:29:21.770 回答
1

我遇到了完全相同的问题,并且按照 TobiMcNamobi 的建议删除/添加引用并没有为我解决,但是删除引用,右键单击项目并选择“添加 > 单元测试...”,从而重新生成引用工作。不确定与手动操作相比有什么区别。

于 2014-02-24T11:25:45.747 回答
1

安装程序有错误的签名。参数 1 的类型应为 Microsoft.VisualStudio.TestTools.UnitTesting.TestContext。

我正在运行一个负载测试项目,并且拥有两个 v10.0.0.0 版本的 DLL:

Microsoft.VisualStudio.QualityTools.LoadTestFramework.dll
Microsoft.VisualStudio.QualityTools.WebTestFramework.dll

将版本 LoadTestFramework 更改为版本 10.1 并没有修复它。

我必须转到我的单元测试项目并删除 MSTest.Adapter 引用:

Microsoft.VisualStudio.TestPlatform.TestFramework.dll
Microsoft.VisualStudio.TestPlatform.Extensions.dll

然后在Unit Test Project中添加对v10.1的引用

Microsoft.VisualStudio.QualityTools.LoadTestFramework.dll
于 2017-07-03T03:35:17.940 回答