问题标签 [moles]

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 回答
2332 浏览

c# - 如何将 Moles 用于构造函数?

我有这样的课:

我希望ModifyPrice对特定值不执行任何操作,但我也想调用将价格设置为 10 的构造函数。我尝试过这样的事情:

但是即使使用好的构造函数很好地初始化了fake,我也不能将它分配给@this。我也尝试类似

但是这次我不能调用我的构造函数。我该怎么办?

0 投票
2 回答
773 浏览

c# - Moling 一个类型,保持特定方法的原始行为

我正在使用 Microsoft Moles,并对以下主题感到好奇:

  • 有什么方法可以设置类型的行为(例如未实现),但保留单个特定方法的原始行为?

我的意图是将要测试的方法(不知道从要测试的方法调用的方法)与其类完全隔离。


以下代码对我不起作用,因为 moles 已完全禁用,并且任何使用的子方法都使用其原始行为:

0 投票
1 回答
567 浏览

c# - 我可以对使用 Moles 创建的痣类型设定期望吗?

我不仅需要交换实现,还需要添加必要的检查以确保以正确的顺序调用某些方法。我可以想象像 Mole + Mock 这样的东西会给我这个选择。有人知道鼹鼠有这个功能吗?

这段代码应该会有所帮助:

0 投票
1 回答
632 浏览

c# - 为什么 Moles 在模拟 SqlDataAdaptor 时不返回“moled”数据集?

我刚刚开始使用 Moles 来模拟一些棘手的遗留代码。本质上,我正在尝试让 SqlDataAdapter 与 Moles 一起使用。(顺便说一句,我在 SqlDataReader 和 SqlCommand 类中成功使用了 moles。)我试图在下面创建一个“简单”单元测试示例,我试图让 SqlDataAdaptor “填充”提供的 DataSet。然后在使用 Moles 时,我在模拟从数据集中检索数据的各种调用。我相信我已经正确设置了 DataSet,以便数据检索将返回预期的“moled”对象并做正确的事情。

当我运行下面的代码时,我可以看到 FillDataSetString lambda 表达式正在执行,并且“d”被设置为“moled”ds。但是当Fill方法返回时,传入的DataSet(“dset”)仍然是一个常规的“DataSet”,而不是“moled DataSet”。因此,第一个 Assert 无法正确运行并引发 IndexOutOfRangeException(“找不到表 0。”)。在第一个断言中,我期望在评估 dset.Tables[0].Rows.Count 时调用以下“moled”方法:

但由于 dset 不是“被模制的”数据集,因此这些调用都不会发生。任何帮助弄清楚 Moles 对 SqlDataAdapter 的数据集参数所做的事情将不胜感激。

要使以下工作,您必须安装“Moles”,引用 System.Data、System.Xml,创建“System.Data.moles”引用。我正在使用 Moles 框架的 0.94.0.0 并在 VS.NET 2010 中运行它,测试项目的“目标框架”设置为“.NET Framework 4.0”。

0 投票
2 回答
795 浏览

c# - 在 Moles 下从 ReSharper 启动 xunit 测试

我的 xunit 测试运行良好;从 ReSharper 启动它们。现在我正在尝试将痣用于一些测试用例。我[Moles]在测试中获得了我的属性,参考了 moles xunit 扩展,但它抱怨“Moles 要求测试在仪器化过程中”。我认为这意味着我需要通过 moles.runner.exe 或其他东西运行它。有没有办法将其设置为使用 ReSharper 启动它?

0 投票
1 回答
350 浏览

unit-testing - 安装后找不到痣

我已经安装了 Pex & moles 并尝试按照教程进行操作

但由于某种原因无法向测试项目添加新项目->痣

在那里找不到文件类型

我试过重装几次都不成功...

我能做些什么 ?

谢谢

0 投票
1 回答
358 浏览

asp.net-mvc - 使用 MOLES 的 ASP .net 单元测试控制器

如何使用 moles 框架对包含 HttpConext 的控制器进行单元测试?我的控制器代码是

我应该如何使用 moles 框架测试我的控制器?

0 投票
1 回答
1097 浏览

.net - 调试测试时 Moles 测试成功完成,但选择“运行测试”时 moles 主机崩溃

我在 Visual Studio 2010 中运行一些 moles 测试时遇到问题。在测试夹具中,我有 4 个测试 - 当我在调试模式下运行它们时,它们都可以正常工作。

当我使用“运行测试”而不是“调试测试”运行它们时,特别失败并给出以下错误:

问题签名:

问题事件名称:CLR20r3

问题签名 01:microsoft.moles.vshost.x86.exe

问题签名 02:0.94.0.0

问题签名 03:4cc31915

问题签名 04:mscorlib

问题签名 05:4.0.0.0

问题签名 06:4d53693b

问题签名 07: 23d7

问题签名 08: 33

问题签名 09:System.AccessViolationException

操作系统版本:6.1.7600.2.0.0.272.7

区域设置 ID:1033

附加信息 1:0a9e

附加信息 2:0a9e372d3b4ad19135b953a78882e789

附加信息 3:0a9e

附加信息 4:0a9e372d3b4ad19135b953a78882e789

所有测试都涉及加载类型并动态创建实例,尽管失败的测试通过检查类的属性、将 xml 反序列化为类型的实例,然后将其用作参数来对类型进行一些额外的检查。类型的构造函数。

不知道为什么这会导致任何具体问题,但这是我唯一能够隔离的事情。

任何帮助将不胜感激。

编辑:

我最初提供了主机抛出的错误,这是VS测试运行器报告的错误:

测试适配器“MolesAgentAdapter”在运行测试“Create_Returns_Configuration_When_Configured_Rule_Specifies_Configuration_Data”时引发异常。无法从 IPC 端口读取:管道已结束。

0 投票
1 回答
1894 浏览

c# - 微软鼹鼠,动态仪器

痣可以通过两种方式使用:

手动

  1. 包括【装配:MoleType(typeof(_type_to_instrument))】
  2. 指定 [HostType("Moles")]
  3. 调用 Microsoft.Moles.Framework.Moles.MoleRuntime.SetMole(Delegate _stub, object _receiver, MethodInfo 方法);

动态地

  1. 添加一个 {project name}.moles 文件:将程序集指定为 mole。例如 <Moles xmlns="http://schemas.microsoft.com/moles/2010/"> <Assembly Name="Samples.Moles"/> </Moles>
  2. 构建并包含对 MolesAssemblies/{project_name}.Moles.dll 的引用
  3. 使用 M{class_name} 自动生成的鼹鼠类。

我注意到的是,使用动态程序集不需要测试项目声明“moled 程序集”属性。这减少了开销,开发人员只需要使用主机类型来装饰每个测试方法。但进一步的测试不需要跟踪要检测的类型。

查看 molesassemblies 中自动生成的代码(使用反汇编程序),很容易找到所需的检测属性。但是,尝试编写我自己的“mole 程序集”,基本上替换自动生成的程序集,并不起作用,并且运行时抱怨我的类型需要被检测。我很好奇我错过了什么。

我注意到自动生成的 moles 代码声明了必要的 MoledAssembly 属性。但是在我的测试中,测试项目似乎要声明这个属性;它不能由项目的引用程序集声明。但是,在使用自动生成的程序集的情况下,它似乎可以将属性声明为“外部”。这是我基于反汇编自动生成的 moles dll 所看到的假设;我找不到任何其他区别。但是,正如我试图解释的那样,从反汇编的自动生成的 moles dll 中复制所有代码(和属性)并构建我自己的引用程序集在运行时失败,说我没有标记需要检测的测试中的程序集(即标有 MoledAssembly) - 只是在我引用的程序集中。

- 更新

在这一点上(可能是由于我误解了我的代码缺少什么)我觉得我们需要非常具体地了解哪些程序集有什么。假设我们有 4 个 dll:

  1. Test.dll:mstest 项目。不声明MoledAssembly
  2. Moles.dll:*.moles在项目中使用文件时创建的自动生成的 dll。引用第 4 个 dll,(参见 #4)Sealed。声明[assembly: MoledAssembly("Sealed")]。请注意,我正在尝试在没有此 dll 的情况下完成手动痣注入 - 它只是一个概念参考或用于我们的讨论或故障排除。
  3. MyMoles.dll:我从源代码编译的自动生成的Moles.dll.
  4. Sealed.dll:包含被测代码。

在答案/评论/问题中 - 让我们根据此列表参考每个部分。

0 投票
2 回答
4254 浏览

c# - Moles 在 .NET 3.5 项目中引用 .NET 4 程序集?

我在 Visual Studio 2010 中使用 Moles,并且一直运行良好。但是,在这种情况下,痣将不起作用。mscorlib.Behaviors程序集引用 .NET 4 程序集,即使项目设置为 .NET 3.5(完整)配置文件。

我有一个最初使用 Visual Studio 2010 在 .NET 4 中构建的解决方案。所需的程序集 (System.ServiceProcess; System.Configuration.Install) 仅适用于 .NET 4 客户端配置文件。测试项目可能只是 .NET 4 (full) Profile,因此不兼容。因此,我将目标项目和测试项目的框架配置文件都更改为 .NET 3.5(完整),因为此配置文件中允许这些程序集。

以下是编译器警告:

无法解析主要参考“mscorlib.Behaviors,Version=0.94.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35,processorArchitecture=MSIL”,因为它间接依赖于 .NET Framework 程序集“mscorlib,Version=4.0.0.0 , Culture=neutral, PublicKeyToken=b77a5c561934e089” 比当前目标框架中的“2.0.0.0”版本“4.0.0.0”高。

有什么方法可以强制 Moles 坚持使用 .NET 3.5,而不必将应用程序移植到 Visual Studio 2008?我真的,真的不想那样做。


更新:

我相信这些是同一个问题:我是唯一一个得到“当前目标框架中不可用的程序集”的人吗?