在我的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” ..
答案 0 :(得分:23)
我使用了较旧的单元测试框架版本的DLL。之所以发生这种情况,是因为项目最近已迁移到VS2012。
因此,在测试项目下的解决方案资源管理器中,您会找到“参考资料”。右键单击它并选择“添加引用...”以打开引用管理器。搜索“unittest”并检查版本号为10.1.0.0的Microsoft.VisualStudio.QualityTools.UnitTestFramework。取消选中此程序集的所有其他版本。单击“确定”关闭管理器。
答案 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>