天道酬勤,学无止境

unit-testing

在单元测试中模拟 PHP 函数(Mocking PHP functions in unit tests)

问题 我正在使用 SimpleTest 对一些 PHP 代码进行单元测试,但遇到了麻烦。 在我对数据库类的测试中,我希望能够为 PHP mysql函数设置期望值。 在我对mail函数的包装类的测试中,我想模拟 PHP mail函数。 这些只是一些例子。 重点是:我不想(总是)测试我的 Mail 类是否发送电子邮件,我想测试它如何调用mail函数。 我希望能够控制这些函数返回的内容。 我希望能够测试我的 Database 类,而无需数据库、固定装置等等。 我在测试 Ruby 代码方面有一些经验,Test::Unit 和 RSpec 使单独测试代码变得非常容易。 我是测试 PHP 的新手,感觉我测试的次数比我需要的要多得多,以便让我的测试通过。 在 SimpleTest 或 PhpUnit 或其他一些测试框架中有没有办法使这成为可能或更容易? 回答1 不是以自动化的方式。 您可以做的是,以某种方式编写代码,以便将外部依赖项包装在从外部传入的对象中。 在您的生产环境中,您只需连接真正的适配器,但在测试期间,您可以将其连接到存根或模拟。 如果你真的坚持,你可以使用 runkit 扩展,它改变了 php 的编程模型,这样你就可以在运行时重新定义类和函数。 然而,这是一个外部和非标准的扩展,所以请记住这一点。 事实上的标准是我上面描述的手动方法。 回答2 这是一篇有趣的文章,写的是模拟全±

2021-12-09 02:39:02    分类:技术分享    php   unit-testing   mocking   simpletest

单元测试应该放在 Meteor 的什么地方?(Where should unit tests be placed in Meteor?)

问题 有没有地方可以让我的测试不受 Meteor 运行的影响? 我刚刚开始了我的第一个 Meteor 项目,并开始使用 Mocha 和 should.js 编写单元测试。 尽管 mocha 运行没有问题,但测试阻止 Meteor 启动,因为它使用节点的require而不是__meteor_bootstrap__.require (完整错误消息)存在问题。 话虽如此, Meteor 不应该运行我的测试! 根据 Meteor 文档,代码只能放在客户端、服务器或两者上。 单元测试套件不属于这些类别,而且我并不是唯一因 Meteor 缺乏用于放置自动化测试的明确定义的位置而感到困惑的人。 现在,我的测试保存在server/test/ ,每个文件的内容都包含在块中: if (typeof(Meteor) === 'undefined') { ... } 虽然这有效,但感觉并不优雅。 对于使用 Meteor 应用程序构建测试,您还有其他建议吗? 更新:代替 Meteor 文档中的明确说明,我遵循 Rails 文件夹约定(第 4 段),使用名为test的文件夹来存储我的测试资产。 后来我将其移至server/test因为我不想将其加载到客户端上。 回答1 将您的测试放在tests/文件夹中。 与为此目的使用名为test的文件夹的 Rails 不同,Meteor 为此文件夹名称使用复数tests

2021-12-08 22:00:17    分类:技术分享    unit-testing   meteor   mocha.js   should.js

有没有办法对异步方法进行单元测试?(Is there a way to unit test an async method?)

问题 我在 .NET 平台上使用 Xunit 和 NMock。 我正在测试一个方法是异步的演示模型。 该方法创建一个异步任务并执行它,因此该方法立即返回并且我需要检查的状态尚未准备好。 我可以在不修改 SUT 的情况下在完成时设置一个标志,但这意味着我必须在 while 循环中继续检查标志,例如可能会超时。 我有哪些选择? 回答1 只是认为您可能需要对此进行更新,因为 #1 答案实际上是在推荐一种较旧的模式来解决此问题。 在 .net 4.5 + xUnit 1.9 或更高版本中,您可以简单地返回一个 Task 并可选择使用测试中的 async 关键字让 xunit 等待测试异步完成。 请参阅 xUnit.net 1.9 上的这篇文章 [Fact] public async Task MyAsyncUnitTest() { // ... setup code here ... var result = await CallMyAsyncApi(...); // ... assertions here ... } 回答2 您的对象是否具有异步方法已完成的任何类型的信号,例如事件? 如果是这种情况,您可以使用以下方法: [Test] public void CanTestAsync() { MyObject instance = new MyObject()

2021-12-08 21:55:13    分类:技术分享    .net   unit-testing   xunit.net   nmock

如何为 CRM 2011 插件正确设置 C# 单元测试?(How do I correctly setup C# unit tests for CRM 2011 plugins?)

问题 尝试调试 CRM 2011 中的插件可能非常困难。 不仅将 .pdb 文件放在服务器上的正确位置存在问题,而且每次进行编码更改时,您都会遇到部署和重新注册插件的麻烦。 由于触发器在 CRM 本身中,因此很难为其创建单元测试。 我目前为一个全新的插件编写单元测试的过程相当缓慢和错误,但它是这样的: 使用SDK插件注册工具注册新插件将调试器附加到 w3wp.exe,在插件代码中放置一个断点。 通过它注册运行的任何操作来触发插件。 当断点被击中时,将管道的原像、后像和目标值序列化为 XML 文件,然后这将成为我的单元测试的输入。 停止调试并创建一个新的单元测试,使用 RhinoMocks 模拟 PluginExecutionContext 和 ServiceProvider,使用加载序列化的 XML 文件作为输入参数的存根。 创建在每个单元测试的开始和结束时运行的方法,这些方法重置(首先尝试删除,然后添加)用于单元测试处理的虚拟数据,然后在测试结束时删除虚拟数据。 编辑序列化文件以引用虚拟数据,以便我可以确保插件每次运行时都能针对完全相同的数据工作。 在单元测试中声明并实例化插件,传入模拟对象执行插件,运行附加查询以确保插件执行我期望的工作,在失败时断言。 这是一个痛苦的事情。 从获得正确的图像,到创建虚拟数据,并在每次测试运行时重置它,似乎有很多需要改进的地方。 如何在不必从

2021-12-08 21:33:42    分类:技术分享    c#   unit-testing   dynamics-crm-2011

ReSharper Unit Test Runner 忽略部署项配置(ReSharper Unit Test Runner ignores deployment items configuration)

问题 我正在使用 Resharper 6.1 对新项目进行单元测试,它似乎忽略了我的 local.testsettings 文件的部署部分。 我尝试在“ReSharper -> 选项 -> 单元测试 -> MSTest -> 使用此测试运行配置”中进行配置以明确使用 local.testsettings 文件,在这个问题中如何建议:ReSharper Unit Test Runner: Support for Deployment Items ,但没有任何反应。 绝望地我试图将文件移出测试项目,创建另一个测试设置文件,将测试项目移动到另一个解决方案,但仍然没有。 有小费吗? 回答1 这也是我自己遇到的一个 ReSharper-Configuration 问题。 愿这对你有帮助。 当我尝试运行该应用程序时,它收到此 ReSharper 错误:“解决方案中不存在要使用此配置运行的项目” 在 Resharper 帮助页面中,我找到了运行配置的路径:https://www.jetbrains.com/help/resharper/2016.2/Run_Configurations.html ReSharper | 工具 | 运行配置... 由于该项目不再存在,我删除了该配置: {项目名称} > 配置 > 删除... 回答2 这个问题 (http://youtrack.jetbrains

2021-12-08 21:24:07    分类:技术分享    unit-testing   resharper   resharper-6.1

在 AndroidTestCase 中使用 @Ignore(Use @Ignore in AndroidTestCase)

问题 我正在使用 AndroidTestCase 进行一些单元测试,并且想知道是否可以使用我为 junit4 阅读过的忽略注释? 只是使用注释会出错,也许,有什么特别需要注意的? 提前致谢,马库斯 回答1 您可以在测试用例类或单个测试方法上使用@Suppress来抑制测试执行。 回答2 您现在可以在使用@Ignore运行时使用@Suppress或AndroidJUnit4 。 回答3 Android 附带 JUnit3 - 而忽略注释是 JUnit4 的一部分。 在 GitHub 上查看这个项目,它可能对你有用。

2021-12-08 21:19:43    分类:技术分享    android   unit-testing   annotations

Groovy 中的单元测试抽象类(Unit testing Abstract classes in Groovy)

问题 我是单元测试和模拟的新手。 我正在尝试在 Grails 中对抽象域类进行单元测试。 我应该如何模拟一个实现,以便我可以对域类的约束进行单元测试? 有没有办法使用 groovy 或 grails 附带的模拟库? 我应该只实现一个简单地扩展抽象类的类吗? 回答1 关于 groovy 的一件很酷的事情(其中之一)是您可以使用带有闭包的方法名称映射作为值来模拟类。 这包括抽象类。 abstract class Foo { def foo() { return bar() + 1 } abstract int bar() } def fooInst = [bar: {-> return 1 }] as Foo assert 2 == fooInst.foo()

2021-12-08 17:59:08    分类:技术分享    unit-testing   grails   groovy   mocking

ASP.Net MVC 中 HttpContext 和可测试控制器的最佳实践(Best practices for HttpContext and testable controllers in ASP.Net MVC)

问题 更新: 根据我收到的几个答案,我只想说明我很清楚如何使用模拟框架来模拟 HttpContext。 与围绕 HttpContext 使用包装类相比,我更感兴趣的是知道模拟 HttpContext 的优缺点是什么。 我正在寻找有关在 ASP.Net MVC 中构建可测试控制器时如何处理 HttpContext 的意见。 在阅读之后,似乎有两种思想流派 - 要么基于 HttpContextBase 构建并使用模拟框架为您的单元测试生成所需的存根/模拟,要么围绕您打算使用的 HttpContext 区域构建不可知的包装类. 现在我倾向于建立 HttpContextBase。 看起来它既是更快的开发过程,也更易于维护,因为您不必花时间开发和维护额外的包装类。 我可以看到包装类可能是如何有益的,因为它们抽象出底层实现并将控制器的上下文与请求分开 - 但我不确定这是否值得设置和维护的额外开销。 您认为这两种方法之间的优缺点是什么,您何时会选择一种方法而不是另一种方法? 是否有某些类型的开发更适合其中一种解决方案? 由于这似乎是大多数进行单元测试和使用 ASP.Net MVC 的团队必须处理的常见问题,您将如何或已经着手处理此问题? 如果你已经解决了这个问题,你的解决方案是如何工作的,你现在会做些什么不同的事情? 回答1 我倾向于 HttpContextBase。

2021-12-08 17:27:17    分类:技术分享    asp.net-mvc   unit-testing   tdd   mocking

Spring事务管理测试(Spring Transaction Management Test)

问题 我想使用 SpringContextTests 测试我的 Dao 类。 在我的方法类中,我扩展了AbstractTransactionalJUnit4SpringContextTests以便我的测试类与 JUnit4 集成。 我还设置了配置,并在@Before进行了初始化和数据库清理,在@After中进行了@Before 。 我的测试班完美运行。 我的问题是,当我运行我的测试类并且数据库充满数据时,原始数据没有回滚并且我的数据库被清除。 在@Before方法中,我清除了数据库并填充了数据,认为我将能够回滚它,但它不能。 任何人都可以找到一个可以工作并回滚数据库中信息的示例。 插件: 我的测试方法中的每个数据库操作都会回滚。 但是@Before方法中super.deleteFromTables("person")的@Before并没有从数据库中回滚之前的所有数据。 Spring 回滚所有 CRUD 操作,但在事务之前清理数据库不会回滚。 回答1 感谢所有回答我问题的人。 我从这些答案中学到了很多东西,但并没有解决我的问题。 我知道我的测试数据可以进行事务管理并且可以正常工作。 错误在于我。 我忘记了数据库命令的教训,当你在一个 DML 语句之后执行一个 DDL 语句时,它会自动提交事务。 我通过删除所有记录在 DML 之后执行 DDL,然后ALTER表的AUTO

2021-12-08 17:02:55    分类:技术分享    java   unit-testing   spring   testing

有没有人创建过 DataContract 测试工具?(Has anyone created a DataContract testing tool?)

问题 有没有人见过测试 WCF DataContracts 的库? 问这个问题的动机是我刚刚在我的应用程序中发现了一个错误,该错误是由于我没有使用 DataMember 属性注释属性而导致的 - 结果,该属性没有被序列化。 我想到的是一个 API,给定特定类型的 DataContract,它将自动使用随机数据填充其成员,包括任何子 DataContracts,然后通过 WCF 序列化程序/格式化程序之一对其进行序列化,然后检查所有数据被带走了。 任何人? 回答1 使用DataContractSerializer将您的对象序列化为MemoryStream ,然后将其反序列化为新实例,这很简单。 这是一个演示这种往返序列化的类: public static class WcfTestHelper { /// <summary> /// Uses a <see cref="DataContractSerializer"/> to serialise the object into /// memory, then deserialise it again and return the result. This is useful /// in tests to validate that your object is serialisable, and that it ///

2021-12-08 17:00:37    分类:技术分享    wcf   unit-testing