什么“方法...... ClassInitialize有错误的签名......”是什么意思?

时间:2013-02-07 11:01:40

标签: c# unit-testing visual-studio-2012 runtime-error

在我的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#测试全部失败并显示消息,如“方法MyCLIClassTest.MyCLIClassTest.ClassInitialize具有错误的签名。该方法必须是静态的,公共的,不返回值,并且应该采用类型为TestContext的单个参数。” / p>

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

4 个答案:

答案 0 :(得分:23)

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

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

enter image description here

答案 1 :(得分:8)

从重复的问题复制的备用答案:Why is a ClassInitialize decorated method making all my tests fail?

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

[ClassInitialize]
public static void SetupAuth(TestContext context)
{
    var x = 0;
}

答案 2 :(得分:1)

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

答案 3 :(得分:1)

  

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

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

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

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

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

Microsoft.VisualStudio.QualityTools.LoadTestFramework.dll

然后在单元测试项目中添加对v10.1的引用

 <li (click)="selectShow(list.show)" [routerLink]="['/details', list.id]" *ngFor="let list of shows"> </li>