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

Tob*_*obi 22 c# unit-testing runtime-error visual-studio-2012

在我的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()
        {
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,C#测试都失败了,消息如"方法MyCLIClassTest.MyCLIClassTest.ClassInitialize有错误的签名.该方法必须是静态的,公共的,不返回值,并且应该采用TestContext类型的单个参数."

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

Tob*_*obi 25

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

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

在此输入图像描述


Zai*_*zvi 12

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

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

[ClassInitialize]
public static void SetupAuth(TestContext context)
{
    var x = 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 正如您在上面的问题中所看到的,ClassInitialize修饰方法已经是public static void,在测试类中是唯一的,并且只接受一个TestContext参数.这两个问题有两个不同的答案.谢谢你的参考. (2认同)