问题标签 [mspec]
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.
unit-testing - 如何使用 TDD / BDD 开发输入对象?
我有一个方法叫做ProcessPayment()
我正在通过 BDD 和 mspec 开发。我需要帮助来应对新的挑战。我的用户故事说:
为了设置上下文,我使用 Moq 对网关服务进行存根。
这是规格:
该方法应采用“PaymentProcessingRequest”对象(不是域 obj),将该 obj 映射到域 obj,并将域 obj 传递给网关服务上的存根方法。网关服务的响应是该方法返回的内容。但是,由于我对网关服务方法进行存根的方式,它并不关心传递给它的内容。结果,似乎我无法测试该方法是否将请求对象正确映射到域对象。
我什么时候可以在这里做并且仍然坚持 BDD?
c# - 使用 Behaves_like在基类上
我想在基本规范上指定一个 Behaves_like 以确保将特定方法标记为虚拟。像这样的东西:
然而,测试运行者并没有选择这个。我认为在命令处理程序的每个规范上指定 ehaves_like 将是一个主要的 PITA。这可能吗?如果不是,这是一种理想的行为吗?
更新:抱歉回复晚了,这是失败的规范:
resharper - MSpec 和 ReSharper 问题
我从 codebetter teamcity 站点获得了最新的 mspec,并按照建议安装了 Resharper5.1 运行器。跑步者和注释在 resharper 选项对话框中显示得很好。
现在,即使勾选了注释库,我仍然到处都收到“从未使用字段 xxx”的警告,当我要求 resharper 在解决方案中运行所有测试时,它似乎找不到我的规范。
我已经解锁了dll。
使用 resharper 5.1。
.net - 无法使用 Syste.Data.SQLite.dll x86 运行 mspec.exe,但它适用于 R# MSpec runner
我使用 mspec 进行测试,并在测试中为我的数据库使用 SQLite x86 的 NHiernate 设置。问题是,当我使用 mspec r# runner 运行我的测试时,一切正常,但是从控制台运行它会出现一个错误,即它找不到 sqlite dll。
我的规范项目配置:
.net 4
x86(使用 x86 版本的 sqlite)
System.Data.SQLite,版本=1.0.64.0,Culture=neutral,PublicKeyToken=db937bc2d44ff139 mspec,版本=0.3.0.0,Culture=neutral,PublicKeyToken=null,目标运行时:v4.0.30319,目标:x86
MSpec 是从源代码构建的。在 Reflector 中,mspec.exe 显示为为 x86 构建的 - 这似乎适合我的设置,并且如上所述使用 r# runner 测试运行良好。
NHibernate.HibernateException:无法从 NHibernate.Driver.SQLite20Driver、NHibernate、版本=2.1.2.4000、Culture=neutral、PublicKeyToken=aa95f207798dfdb4 创建驱动程序。---> System.Reflection.TargetInvocationException:调用的目标已抛出异常。---> NHibernate.HibernateException:找不到程序集 System.Data.SQLite 中的 IDbCommand 和 IDbConnection 实现。确保程序集 System.Data.SQLite 位于应用程序目录或全局程序集缓存中。如果程序集在 GAC 中,请使用应用程序配置文件中的元素来指定程序集的全名。在 NHibernate.Driver.ReflectionBasedDriver..ctor(String driverAssemblyName, String connectionTypeName, String commandTypeName) 在 NHibernate.Driver.SQLite20Driver..ctor()
有谁知道如何解决这个问题?
提前感谢多云维也纳的问候,
克里斯
visual-studio-2010 - Visual Studio 2010 中的 MSpec 仍然无法正常工作
之前有人问过类似的问题,当我在 Visual Studio 2010 中运行 MSpec 时出现以下错误:
无法加载文件或程序集“Machine.Specifications.dll”或其依赖项之一。该系统找不到指定的文件。
另一篇文章中的解决方案是下载 .net4 特定版本的 MSpec。但是,这就是我正在使用的,它仍然无法正常工作。我什至今天重新下载了最新版本,并使用 build-4.0-release.cmd 文件构建了它。替换了我的参考,仍然有同样的问题。
奇怪的是,我第一次运行 MSpec 时,它工作得很好。只有当我尝试重新运行它时,我才会收到此错误。
测试在 ReSharper 测试运行器中仍然运行良好。所以,还是可以用的。但是,ReSharper 测试运行程序不会生成 Report.html 文件。这真的是我想让它工作的唯一原因。有没有办法让 ReSharper 生成 Report.html 文件?那也能解决问题。
c# - 用 MSpec 比较两个列表
我应该使用哪种方法来断言两个列表包含具有 MSpec 的相同对象?
resharper - 更改 resharper 设置以适应 mspec 编码
当我创建如下新测试时:
它应该_get_something = () => foo();
当我在代表前面打分号重磨器时:
Private It should_get_something = () => foo();
然后我必须删除它。
我可以告诉 resharper 不要这样做吗?我尝试在命名样式对话框中添加一条规则,选择 Machine.Specifications.It 并取消选中 Private 但这没有效果。
c# - 如何使用 RhinoMocks 断言具有三种不同类型的泛型方法?
我正在尝试学习 Rhino Mocks AAA 语法,但在断言某个方法(带有任何参数值)被调用时遇到了麻烦。我使用 Machine.Specifications 作为我的测试框架。
这个特定的方法是通用的,我想确保它被三种不同的类型调用了三次。
我为每种类型的函数存根。但我得到了一个有趣的结果。(以下)
结果是两个例外和一个通过。
第一个调用抛出:
System.InvalidOperationException:没有设置要验证的期望,确保操作中的方法调用是虚拟(C#)/可覆盖(VB.Net)方法调用
第二个抛出:
System.InvalidOperationException:录制时仅在模拟方法调用中使用 Arg。预期 1 个参数,已定义 2 个。
第三个通过了……出于某种奇怪的原因。
我还尝试在我的设置中将 GenerateMock() 与 Expect 结合使用,以及将 GenerateStub() 与 Stub 结合使用。两者都得到了完全相同的结果。我一定是做错了什么。
我正在使用:MachineSpec 0.3.0.0 和 RhinoMocks 3.6.0.0
有任何想法吗?
- - -固定的 - - - - -
这是在 Lee 的帮助下的完整(工作版本)。我正在使用一个额外的(非 linq)层。我的实际问题是我的一项测试在离线真实代码中重新使用了错误的 lambda 变量。它应该做某事 = () => repo.AssertWasCalled( o => repo .Save(data)); //错误的lambda
所以这里有一个正确测试的样本供参考。
c# - LambdaExpression 比较
我正在使用机器规格进行测试,有些事情我无法做到,想知道是否有人以前去过那里,
有什么方法可以使用 Rhino Mocks 为使用 lambda 表达式的方法创建存根,我发现我可以执行以下操作
在示例类中使用此方法:
我可以像这样存根方法:
问题是我想把方法存根不是Any Lambda Expression,只是针对特定的 lambda 表达式 "x=>x.Id==userId && user.IsActive ==true"
,这样如果这个表达式在方法中发生变化,测试就会失败......
我想我可以创建一个不进入数据库的模拟存储库并测试 lambda 中的行为,但我想知道是否还有另一种方法......
感谢对此的任何建议,谢谢