标签: microsoft-fakes

Testing.Fakes异常:无法从COR_PROFILER_PATH和COR_PROFILER环境变量解析探查器路径

使用Microsoft Fakes Framework的测试失败,但异常:Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationException:无法从COR_PROFILER_PATH和COR_PROFILER环境变量解析探查器路径

VS解决方案和构建最初是在VS 2012中创建的,并且在TFS 2012构建/控制器下运行良好,但不在TFS 2013下.我确实在TFS 2013构建服务器上安装了Ultimate VS 2012和Ultimate VS 2013.在解决此问题时,我将构建定义中的测试设置从使用"Visual Studio Test Runner"更改为"MSTest.exe Test Runner(VS 2010 Compatible)",现在无法将其更改为"Visual Studio Test Runner"在选择下拉中不再是一个选项.我甚至将TFS 2013中的构建模板替换为TFS 2012中的构建模板,但在编辑测试运行时,"Visual Studio Test Runner"仍然不是构建定义Process\Automated Tests部分中下拉选项的选项.

如何解决问题并获得使用Microsoft Fakes在TFS 2013构建中运行的测试?

microsoft-fakes visual-studio-2012 tfs2012 visual-studio-2013 tfs2013

16
推荐指数
1
解决办法
5774
查看次数

Visual Studio单元测试在TFS Build上运行较慢

我的项目有1000多个单元测试,在本地机器上,所有测试都在不到10秒的时间内完成.但是当他们在TFS Build上运行时,某些测试的运行速度明显慢于其他测试.其中3个在大约1-2分钟内运行,其他4个在5-30秒内运行,其他的则在几分之一秒内运行.我注意到所有那些较慢的测试都使用来自Microsoft Fakes的假货,而且每一个都是第一个在它的类中运行的.但是很多其他测试也使用假货(一些更密集)并且定期运行.我想知道可能导致这种减速的原因以及如何解决这个问题.

编辑:我注意到,在无模拟测试之后,每个较慢的测试都会运行.也许这种减速是由ShimsContext的初始化引起的.在我的测试类中,ShimsContext是在TestInitialize和TestCleanup方法上创建和处理的.这会对性能产生重大影响吗?

c# tfs unit-testing microsoft-fakes visual-studio-2013

15
推荐指数
1
解决办法
804
查看次数

不为.NET方法生成填充程序

当我开始使用Microsoft Fakes时,我很高兴开始填补一些.NET方法.我一直相信我能够使用任何.NET方法,静态或不是:http://msdn.microsoft.com/en-us/library/hh549176.aspx.

但是,我一直试图在TcpClient中填充一些方法,只创建了存根,这对我没有好处,因为我希望能够改变一些方法来返回我自己的数据,而不是依赖于直播TcpClient给我数据.

如果还有其他超越Microsoft Fakes的方法,我愿意接受有关如何执行此操作的任何建议.

编辑:添加代码来演示问题

[TestMethod]
public void CommunicationTest()
{
    var stubbedTcpClient = new System.Net.Sockets.Fakes.StubTcpClient
    {

    };

    //No such ShimTcpClient exists
    var shimmedTcpClient = new System.Net.Sockets.Fakes.ShimTcpClient
    {

    };
}
Run Code Online (Sandbox Code Playgroud)

.net c# moles microsoft-fakes

14
推荐指数
1
解决办法
6318
查看次数

Microsoft Fakes测试项目无法加载程序集

我在使用Microsoft假货的解决方案中有一个单元测试项目,当我构建它时会得到以下错误.它抱怨无法加载的DLL在磁盘上.我已经打开Fusion日志并且表明绑定成功,所以现在卡住了.其他任何人都有假装问题?

could not load assembly Logging at C:\src\Application\Development\Main Development Branch\Source\Common Library\Logging\bin\Debug\Logging.dll
Run Code Online (Sandbox Code Playgroud)

microsoft-fakes

14
推荐指数
1
解决办法
4418
查看次数

无法使用Fakes程序集构建项目

我在我的Visual Studio 2012单元测试项目中添加了一个Fakes程序集,对应于我的应用程序项目(被测系统),如Peter Provost的文章中所述.但是,由于生成的Fakes代码中未解析的类型引用,项目将不再构建:

The type or namespace name 'FieldDefinition' does not exist in the namespace 'bc::ProductStudio' (are you missing an assembly reference?)
[C:\Users\arvek\Projects\Project\Project.Tests\obj\Debug\Fakes\bc\f.csproj]
C:\Users\arvek\Projects\Project\Project.Tests\f.cs
Run Code Online (Sandbox Code Playgroud)

这里出了什么问题?据我所知,这应该只是起作用,所以在我看来Fakes设施中存在一个错误.

c# unit-testing microsoft-fakes

13
推荐指数
2
解决办法
1万
查看次数

如何轻松替换Microsoft Fakes程序集?

将Microsoft Fakes程序集添加到测试项目中很容易:只需右键单击references部分中的父程序集,然后选择"Add Fakes Assembly".但是,当父程序集公共接口更改(新接口,新方法)时,伪造程序集会变得过时.

当我再次右键单击父组件时,我很乐意看到"替换假装组件"或"更新假装组件",但我看到的只是"添加伪装配".

添加Fakes程序集时选择"Add Fakes Assembly"会导致错误:

伪装配已经引用.Fakes程序集已经在参考列表中.删除.Fakes参考,然后重试.

按照说明操作,然后选择"添加伪装配"后,会发生同样的错误.

我可以通过删除Fakes目录(.fakes)中相应的xml文件来解决这个问题.

因此,在成功更新fakes程序集之前,我必须手动删除两个项目(fakes程序集和fakes xml文件).

有更简单或更直接的方法吗?

c# unit-testing microsoft-fakes visual-studio-2012

13
推荐指数
1
解决办法
3502
查看次数

微软假框架提供的任何替代垫片功能?

我想知道是否有任何替代lib到微软假框架提供的垫片功能,因为它只支持最终版本?

microsoft-fakes

13
推荐指数
2
解决办法
3339
查看次数

如何在UnitTest中模拟/伪造SmtpClient?

我想用它来伪造System.Net.Mail.SmtpClientMS-Test UnitTest.因此我添加了一个Fizz Assembmly of System.dll.然后我创建一个ShimsContext和一个StubSmtpClient.

using (ShimsContext.Create())
{
   StubSmtpClient client = new StubSmtpClient();               
}
Run Code Online (Sandbox Code Playgroud)

但是我该怎么做呢?最终目标是编写一个Test,它期望使用对象调用send方法MailMessage.

c# mstest microsoft-fakes

13
推荐指数
3
解决办法
1万
查看次数

抑制Microsoft Fakes警告

我正在使用Microsoft Fakes来填充几个WindowsAzure组件进行测试.按照vs 2012中的建议: Shims 编译,我更新了我的.fakes文件,只生成我实际需要的垫片:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/" Diagnostic="false">
  <Assembly Name="Microsoft.WindowsAzure.Storage" Version="2.1.0.0"/>
  <StubGeneration>
    <Clear/>
  </StubGeneration>
  <ShimGeneration>
    <Clear/>
    <Add FullName="Microsoft.WindowsAzure.Storage.CloudStorageAccount"/>
    <Add FullName="Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient"/>
    <Add FullName="Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer"/>
    <Add FullName="Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob"/>
    <Add FullName="Microsoft.WindowsAzure.Storage.Queue.CloudQueueClient"/>
    <Add FullName="Microsoft.WindowsAzure.Storage.Queue.CloudQueue"/>
  </ShimGeneration>
</Fakes>
Run Code Online (Sandbox Code Playgroud)

但我仍然得到"一些假货无法生成......"的警告.正在生成所有指定的填充程序,并且对上述任何行进行注释会导致我的测试项目无法构建.如果我打开诊断程序,我会看到许多消息,例如:

Warning 2   Cannot generate shim for Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient+<>c__DisplayClass1: type is not supported because of internal limitations.
Run Code Online (Sandbox Code Playgroud)

一切正常,我只想抑制警告,以免混淆我们的CI服务器.是否有非诊断消息的警告编号,我可以直接在测试项目中忽略?

microsoft-fakes visual-studio-2013

13
推荐指数
1
解决办法
7494
查看次数

VS2012项目包含Fakes组件定义始终重建

最初我们在复杂的解决方案中发现了这个问题,但现在我也可以在虚拟项目中重现它.

如果我在VS2012 premium(更新4)中创建项目并为其中一个引用添加Fakes程序集,那么无论是否有任何更改,项目似乎都会重建.即我构建项目然后再次单击构建按钮将导致重建项目.

打开诊断构建信息,似乎问题的根本原因是编译.fakes文件的工具正在触摸.Fakes.dll文件,因此VS认为某些内容已更改:

1>Using "Touch" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>Task "Touch" (TaskId:11)
1>  Task Parameter:
1>      Files=
1>          D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\mscorlib.4.0.0.0.Fakes.dll
1>          D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\System.4.0.0.0.Fakes.dll
1>          D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\mscorlib.4.0.0.0.Fakes.fakesconfig
1>          D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\System.4.0.0.0.Fakes.fakesconfig (TaskId:11)
1>  Touching "D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\mscorlib.4.0.0.0.Fakes.dll". (TaskId:11)
1>  Touching "D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\System.4.0.0.0.Fakes.dll". (TaskId:11)
1>  Touching "D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\mscorlib.4.0.0.0.Fakes.fakesconfig". (TaskId:11)
1>  Touching "D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\System.4.0.0.0.Fakes.fakesconfig". (TaskId:11)
1>Done executing task "Touch". (TaskId:11)

[...]

1>Input file "D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\System.4.0.0.0.Fakes.dll" is newer than output file "obj\Debug\UnitTestProject1.pdb".
Run Code Online (Sandbox Code Playgroud)

请告诉我我做错了什么以及如何解决这个问题,以便项目不会一直冗余地重建.

提前致谢

编辑

为了澄清,以下是重现问题的步骤:

  1. 创建您选择的C#项目(我已经尝试过单元测试和控制台应用程序)
  2. 在其中一个引用的程序集上添加一个Fakes Assembly(我在上面的示例中使用了System)
  3. 建立项目
  4. 再次构建(不重建)

请注意,您不必向解决方案添加单行代码.

c# microsoft-fakes visual-studio-2012

13
推荐指数
1
解决办法
1603
查看次数