问题标签 [microsoft-fakes]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2599 浏览

c# - 如何在 Process.Start 上使用 Microsoft Fakes 程序集

我想模拟System.Diagnostics.Process.Start调用,所以我为System Assembly 添加了一个 Fakes Assembly。

问题是Start是System.Diagnostics.Process上的一个静态方法,所以我没有得到一个 shim 来支持 Start 方法的委托。

这样做的正确方法是什么?

0 投票
1 回答
437 浏览

vb.net - 如何使用 Microsoft Fakes Shim 对 VB.NET 4 中的紧密耦合类进行单元测试,尤其是对于构造函数

Microsoft Fakes 是一个相对较新的框架,我对这个问题的所有方面也相对较新,所以我需要详细的答案。

我被赋予了对应用程序进行“单元测试”的任务,我们将其称为旧版应用程序(由 Michael Feathers 定义),特别是使用 Microsoft Fakes 框架。我的经理建议使用 Fakes 的原因是它能够允许围绕外部依赖项和 API 进行单元测试,特别是删除数据库依赖项。

鉴于我在 VB.net、.NET 框架和单元测试方面的背景很薄弱,所以这项任务有点压倒性。无论如何,我想深入了解使用 SHIMS 来绕过这些内部类依赖项。我对 SHIMS 与更快、更容易实现的 STUBS 感兴趣的原因是因为此应用程序中没有接口(其他我相对不熟悉的东西。)并且 STUB 需要接口。

现在,对于这个背景下的一个更具体的问题,我想帮助尝试对一个类进行单元测试,比如由“字符串名称”和类型“地址地址”组成的类 Person,并将它们用作构造函数参数。然后,我们可能会使用参数“string streetNumber”、“string street”和用户类型“state State”及其自己的参数构造地址类...

而在别处...

然后会有一个状态,它包含它包含的任何属性和方法......

所以,我想知道如何构建一个单元测试来将类 Person 与这些其他类(地址然后状态)隔离开来,这样如果它们处于开发或更改状态,Person 的单元测试仍然会通过......任何建议???

0 投票
0 回答
1403 浏览

c# - 运行假货单元测试时抛出空异常

假货单元测试对我来说很新鲜。我以前从未这样做过,所以我决定练习它,但有一个问题是我无法调试假货单元测试,因为 Shims.Context.Create() 抛出空异常。当我运行测试时,它可以工作,但是当我调试它时,我得到了抛出空异常。如何解决?

类:文件阅读器

FileReader 类的假冒单元测试:

0 投票
5 回答
65631 浏览

.net - MSB3270:处理器架构之间的不匹配 - Fakes Framework

由于我在 UnitTest 中使用 Fakes Framework,因此收到以下 MSBuild 警告。

警告 MSB3270:正在构建的项目“MSIL”的处理器架构与参考“DocumentServiceModel”、“x86”的处理器架构不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改项目的目标处理器体系结构,以便在项目和参考之间对齐处理器体系结构,或者依赖具有与项目的目标处理器体系结构匹配的处理器体系结构的参考。[C:\Projekte\XXX\XXX\XXX\Source\Testing\UT\XXX.UnitTest\obj\Debug\Fakes\ppsm\f.csproj]

解决方案中所有项目的平台目标设置为 x86。

我怎样才能摆脱这个构建警告?

更新1:

我认为问题在于,Fakes Framework 创建了一个具有平台目标“任何 CPU”的动态项目。

(C:\Projekte\XXX\XXX\XXX\Source\Testing\UT\XXX.UnitTest\obj\Debug\Fakes\ppsm\f.csproj)

这个动态项目引用了我的项目中的程序集,该项目以平台目标“x86”运行。

我不知道如何将动态 Fakes 项目更改为“x86”。

更新2:

我创建了一个示例项目,我得到了同样的警告:

单元测试 csproj:

类库 csproj:

更新3:

我将配置更改为如下所示。

但我仍然收到警告

0 投票
1 回答
3487 浏览

tfs - TFS 2012 + VS 2013 + Microsoft Fakes 编译问题(仅在 TFSBuild 期间)

我们正在使用 TFS 2012(更新 3)和 VS 2013 RC。我们有一个 .sln 文件,其中包含两个项目 - 主项目/程序集和一个 UnitTest 项目。单元测试项目正在利用 Microsoft Fakes。在 Visual Studio(我们使用 Premium)中,我可以编译 .sln 并运行测试。在构建代理上,我可以使用 Visual Studio 编译和构建 .sln 并运行测试。但是当我们对构建进行排队时,它无法构建 UnitTest 项目,因为它找不到 Fakes 程序集。它似乎不像在 Visual Studio 中构建时那样动态创建它。通常在 VS 中创建 fakes dll 并将其放在 FakeAssemblies 文件夹中。构建失败后,我可以登录并看到它根本没有创建 FakeAssemblies 目录。

错误是... C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets (1605):无法解析此引用。找不到程序集“System.Web.Http.5.0.0.0.Fakes”。检查以确保该程序集存在于磁盘上。如果您的代码需要此引用,您可能会遇到编译错误。

我们的构建使用默认模板 - 我们选择构建 .sln(具有主程序集和单元测试项目)。我们不应该在那个 .sln 中包含 UnitTest 吗?在构建过程中是否应该以其他方式编译 UnitTest?

有谁知道为什么构建不会像 Visual Studio 那样通过动态创建 Fake 程序集?

谢谢!!!

0 投票
4 回答
5701 浏览

microsoft-fakes - Microsoft fake framework 中提供的 shim 功能的任何替代方案?

我想知道 Microsoft fake 框架中提供的 shim 功能是否有任何替代库,因为它仅在最终版本中受支持?

0 投票
0 回答
533 浏览

c# - MS Fakes - 访问存根的基类成员

是否可以在存根中模拟出基类的成员?例如,如果我有:

然后我希望能够编写一个执行此操作的测试:

但是,GetNumber01不存在,StubMyObject因为它是基类的成员。

编辑:删除假货组件并重新添加后,这个问题就消失了。看起来这只是假货组件没有更新的问题。

0 投票
2 回答
4312 浏览

c# - 使用 Fakes 时正在测试的方法中“模拟”对私有方法的调用

我正在使用 Microsoft Fakes 来分析一个很长的方法,对其进行重构并更好地理解它。我已经分离出几行看起来像是一个很好的候选者,可以重新分解为一个单独的私有方法。我采用的方法不是手动修改代码(仅使用开箱即用的重构),以尽量减少我的更改带来的影响。这是问题:一旦我将有问题的行重新分解为单独的私有方法,我想消除与这些行相关的所有设置代码(以及包装它们的新私有方法),然后“模拟”通过提供默认的预设答案来拨打电话。这闻起来像存根/垫片,但我们正在谈论被测类,所以我需要该类来执行它的代码,除了“模拟”方法。在 Rhino Mocks 中,我会使用 PartialMock 来消除这样的调用(在首先使它们成为虚拟之后!!!)但是在这种情况下 Fakes 可以帮助我吗?谢谢。

0 投票
1 回答
804 浏览

c# - ADO.NET 特定测试数据集 id 模拟

使用Microsoft Fakes Framework,我正在开发一个单元测试来测试插入记录的方法。我有三个类TransportControllerTestTransportManagerDbController。是TransportControllerTest单元测试类。它TransportManager是业务逻辑层的一部分,DbController具有三种方法(插入、获取和删除)。最后这些方法使用ADO.NET访问我的数据库。

在我的单元测试中,我想测试TransportController. 此控制器调用dbController两次:dbController.insert()dbController.get()。最后一次调用通过传递用于在第一次调用中插入的参数来给出最后生成的密钥。所以在 中TransportController,我可以通过调用来访问生成的 id:

我想模拟上面的值,所以这个表达式是真的:

我尝试了以下方法:

但这不起作用。如何使给定的表达式在我的测试中为真?

0 投票
1 回答
240 浏览

c# - .Net Fakes - 表达式术语

我已经为我的测试解决方案创建了一个带有 VS2013 的 Fake Dll (System.Web.Mvc),并且我使用以下语法来解析数据:

我正在使用这个 Shim(效果很好):

但必须有以下语法的替代解决方案:

但我不知道如何用 Lambda 表达式解决这个问题?我不确定它是如何工作的,也许有人可以给我一个提示或者告诉我这个语法是如何工作的。