我对组件进行了大约300次单元测试,这是我最初在VS2010下开始的解决方案的一部分。许多测试使用了Micrsoft提供的Moles框架,但在升级到VS2012(Update 2)之后,我想改变测试以使用官方提供的Fakes框架。
我相应地更新了相应的测试,通常只涉及创建ShimsContext
以及对代码进行一些细微更改:
之前
[TestMethod]
[HostType( "Moles" )]
public void MyUnitTest_CalledWithXyz_ThrowsException()
{
// Arrange
...
MGroupPrincipal.FindByIdentityPrincipalContextIdentityTypeString =
( t1, t2, t3 ) => null;
...
try
{
// Act
...
}
catch( Exception ex )
{
// Assert
...
}
}
后
[TestMethod]
public void MyUnitTest_CalledWithXyz_ThrowsException()
{
using( ShimsContext.Create() )
{
// Arrange
...
ShimGroupPrincipal.FindByIdentityPrincipalContextIdentityTypeString =
( t1, t2, t3 ) => null;
try
{
// Act
...
}
catch( Exception ex )
{
// Assert
...
}
}
}
我的测试项目中有不同的测试类,当我运行测试时,我得到任意的错误,我无法解释,例如:
同事在他的系统上的行为相同。错误消息始终为TypeLoadException
,例如
测试方法...抛出异常:System.TypeLoadException:无法在程序集“System.DirectoryServices.4.0.0.0.Fakes,Version = 4.0.0.0”中加载类型“System.DirectoryServices.Fakes.ShimDirectorySearcher” ,Culture = neutral,PublicKeyToken = ...“
在VS2012本身,源代码编辑器没有显示任何错误,Intellisense按预期工作,鼠标工具提示例如, ShimDirectorySearcher显示它所在的位置等。此外,当我用.NET Reflector打开正在生成的Fakes程序集(例如System.DirectoryServices.4.0.0.0.Fakes.dll)时,会出现错误消息中显示的类型。
在我们从VS2010切换到VS2012之前,所有测试都运行良好(在调试和发布模式下),但现在我们不知道这里有什么问题。为什么结果会以上述方式改变?为什么我们得到TypeLoadExceptions,即使这些类型确实存在?
不幸的是,Micrsoft或互联网上几乎没有任何帮助。
答案 0 :(得分:0)
我不太明白为什么让VS2010中的旧.testsettings
文件出现问题,但删除它并按照MSDN的建议添加.runsettings
文件为我工作。
所有问题都解决了:
希望这可以帮助遇到问题的其他人,但似乎没有太多关于Fakes的信息。
关于Code Coverage
的另一件事:这可以通过菜单Test =>工作(无需配置任何测试设置)分析代码覆盖率。对于TFS构建定义,您可以通过选择Process =>来为构建启用代码覆盖。基本=>自动测试=> 1.测试源。现在,单击相应的文本字段,然后单击单击文本字段时显示的({1}}按钮。现在在...
ComboBox中选择Visual Studio Test Runner
。现在,您也可以从选项中选择Test runner
。