- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对单元测试真的很陌生,虽然我花了很多时间进行研究,但我无法找到适合我的案例的正确方法。
我的代码库很大(大约 3 年的工作),不幸的是耦合度很高,很难测试,而且从未对其进行过单元测试。
例如,当尝试测试集合类时 ProductCollection
,更具体地说,bool MoveElementAtIndex(Product productToMove, int newIndex)
其中,我遇到了以下问题:
new ProductCollection()
new KeyedList<ID, Product>
.我想这不应该在这个构造函数中调用,因为我没有测试 KeyedList
.ProductCollection
添加 3 个产品.new Product()
.Product
的构造函数类做几件事this.ID = IDUtils.ComputeNewIDBasedOnTheMoonPhase()
.我想我也不应该对此进行测试,因为这不是我的范围。我应该如何避免这种深度的调用?this.Properties = new ProductProperties(folderPathToDefaultProperties)
.这不应该从我的简单 FieldCollection.MoveElementAtIndex
调用测试,对吗?ProductCollection.Add(MyProduct)
检查底层的 KeyedList
是否已经包含该产品。这也是我应该避免的业务逻辑,与我的测试无关。问题是如何?Add
方法,会引发一些事件,通知系统几件事情(例如,新产品已添加到集合中)。我想这些也不应该被解雇。KeyedList
实际上包含那些字段,它调用KeyedList.Remove()
, KeyedList.Insert()
因为它的移动逻辑,它会触发类似 CollectionModified
的事件.如果你能解释一下如何正确地进行这个单元测试,如何避免底层对象被调用,我将不胜感激。
我想到了微软的 Moles 框架(VS2010),因为我的印象是它不需要我重构所有东西,因为这绝对不是一个选择。但是已经尝试过了,仍然找不到合适的使用方法。
此外,我的印象是这个具体示例对我的情况有帮助,因为现实世界中的代码通常就是这样。
有什么想法吗?
最佳答案
您的代码在设计时并未考虑单元测试,因此很难做到。我建议您正确设计新代码并对其进行单元测试,并尝试重构最重要的内容,以便对其进行单元测试。
例子:
But the constructor of Product class does several things. It computes a unique ID for the newly created product: this.ID = IDUtils.ComputeNewIDBasedOnTheMoonPhase(). I suppose I should not test this neither, since it's not my scope. How should I avoid such calls at this level of deepness?
要解决此问题,您应该将接口(interface) IUtils 传递给您的 Product 构造函数。要测试您的 Product 类,您可以创建一个 IUtils 的模拟,它返回一个设定值。您可以对 ProductProperties 执行相同的操作。
Also, in this Add method, some events are raised, notifying the system about several things (e.g., that a new product was added to the collection). These should also not be fired at all I suppose.
这归结为设计。您可以使用观察者模式,并且在单元测试时没有任何观察者。
关于c# - 单元测试 : how to test methods with a lot of underlying objects and business logic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14294861/
我知道使用 https://www.skype.com/en/developer/create-contactme-buttons/ 添加 Skype 链接很容易.但是可以为 SkypeForBusi
Closed. This question is opinion-based。它当前不接受答案。 想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。 上个月关闭。
Closed. This question is off-topic。它当前不接受答案。 想改善这个问题吗? Update the question,所以它是用于堆栈溢出的on-topic。 已关闭8
我们使用一个持久的 Skype for Business 聊天室,并用它来广播每天在特定项目上完成的工作。我想在每个工作日早上启动 Skype for Business 并将其打开到这个聊天室。我想使
我在本地和远程(通过 VPN)与 GUI 应用程序交互。当我在本地使用它时,大多数操作发生得非常快,而且我的 sikuli 脚本执行得很好。但是,当我远程使用它时,操作需要更长的时间才能完成。 也就是
如何在业务催化剂中编辑模板?我可以从用户界面执行此操作还是需要 Dreamweaver 或其他一些产品? 我用谷歌搜索,但找不到答案...... 当我登录时,在网站选项卡下,有站点编辑器、网页、博客和
我刚开始使用 Google My Business API,并且能够执行获取操作只是为了验证我的 Oauth 设置是否正确。现在我想使用 GMB 添加位置 API 的 post 方法添加一个位置,但在
我们在我们的应用程序中使用 Skype for Business Web SDK 来显示联系人的存在。 当联系人是用户组织内部的某个人(因此与用户在同一个 AD 实例)时,我们在联系人的状态 onCh
有没有办法使用 GMB API 获取评论的链接? 最接近我需要的是这个: https://www.google.com/maps/contrib/113400145807499011881/place
{ "error": { "code": 429, "message": "Quota exceeded for quota metric'Requests' and limit 'Requests
有很多为 Skype 创建 HTML 链接的解决方案(href="skype:username"),但我找不到任何适用于 Skype for Business 的解决方案。 (引用=“啜饮: 有关如何
对于给定的 n 态 busy beaver game , 是 busy beaver function是唯一的,还是可能有多个功能具有相同的最高分?也许这两种方式都没有得到证明? 最佳答案 是的,是的
也许我在当前的 Google MyBusiness API 迁移中遗漏了一些东西。 我们有在 Google My Business API 上运行的脚本,该 API 将于 2022 年 4 月结束,取
在 Business Objects XI Web Intelligence 中,Rank 函数返回密集结果。例如,当按“金额”排名时,我只想返回前十名记录。然而,三项记录在“金额”上并列第五。结果总
我正在按照本指南 ( https://msdn.microsoft.com/en-us/skype/ucwa/authenticationusingazuread ) 尝试和验证并创建 Skype 应
由于我一直在努力学习 Angular,所以这几天我一直在与这个 ng-busy 作斗争。 我有一个 plunker 页面,它可以工作,但不是我想要的。该页面正在显示加载动画,但我想让它在按钮内显示加载
我正在运行关于 svn 的 java 代码,它是这样的 http://code.google.com/p/justcodingforfun/source/browse/MagicMissile/src
请帮助我理解。我是一名技术专家,并试图确定在使用WhatsApp Cloud API执行分配给我的业务任务时是否会有任何限制。。在WhatsApp Business Account文档中,我看到了许多
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
我正在尝试为我的大型 ASP.NET MVC 应用程序创建业务和数据层。因为这是我第一次尝试这种规模的项目,所以我正在阅读一些书籍,并努力小心地将事情正确地分开。通常我的应用程序混合了业务逻辑和数据访
我是一名优秀的程序员,十分优秀!