问题标签 [mocking]

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 投票
5 回答
13854 浏览

testing - 什么是模拟,什么时候应该使用它?

我刚刚阅读了关于模拟对象的维基百科文章,但我仍然不完全清楚它们的目的。当实际对象过于复杂或不可预测时,它们似乎是由测试框架创建的对象(您知道 100% 确定模拟对象的值是什么,因为您完全控制它们)。

但是,我的印象是所有测试都是使用已知值的对象完成的,所以我一定遗漏了一些东西。例如,在一个课程项目中,我们的任务是使用日历应用程序。我们的测试套件由我们确切知道它们是什么的事件对象组成,因此我们可以测试多个事件对象、各种子系统和用户界面之间的交互。我猜这些是模拟对象,但我不知道你为什么不这样做,因为没有已知值的对象,你就无法测试系统。

0 投票
3 回答
17469 浏览

java - jmock 模拟静态方法

我的代码中有一个静态方法,我想以某种方式模拟。

我正在使用 jmock。

我想我可以做到这一点的一种方法是在静态方法周围有“包装类”并模拟它,但我希望有一个更好的解决方案。

我会以错误的方式解决这个问题吗?

回馈:

我将有一个接口和类,它有一个调用静态方法的方法。它允许我通过模拟对这个包装类的调用来模拟逻辑。(即使谈论它我也觉得很脏:))

0 投票
2 回答
723 浏览

unit-testing - 如何在测试中避免重复代码并避免嘲笑自己?

在我的问题中,作为“mockist” TDD 从业者,我是否应该在与被测方法相同的类中模拟其他方法?, Avdi回答说:“我个人认为嘲笑 self 几乎总是一种代码味道。它是在测试实现而不是行为。” 他可能是对的,但我常常无法区分实现和行为。

我有另一个示例(在 Python 样式的伪代码中)可能会导致有用的答案:

这里的想法是 get_components 方法调用 spec_filepath 方法以获取 get_components_from_spec_file 组件类方法将从中读取组件列表的文件的路径。spec_filepath 方法依次调用spec_dirpath,它从VCS 系统同步包含spec 文件的目录并返回该目录的路径。(尽量不要在这段代码中寻找错误——毕竟它是伪代码。)

我正在寻找有关如何测试这些方法的建议...

测试 spec_dirpath 应该非常简单。我可以模拟 VCS 类并让它返回一个模拟对象并确认调用了适当的方法(并且 spec_dirpath 方法返回模拟的 dirpath 方法返回的内容)。

但是,如果我在测试 spec_filepath 时不模拟 spec_dirpath,如何避免在 spec_filepath 测试中从 spec_dirpath 代码中复制相同的测试代码?如果我在测试 get_components 时不模拟 spec_filepath,如何避免从 spec_filepathspec_dirpath 复制测试代码?

0 投票
2 回答
4356 浏览

java - 使用 JMockit 在抽象类中模拟非公共静态方法?

我有以下课程:

我想模拟这种方法。我决定使用JMockit。所以我创建了一个模拟类:

我的测试代码如下所示:

不幸的是,这个测试表明 AbstractParent 返回“OriginalOutput”而不是“MOCK”。任何想法为什么?难道我做错了什么?我也尝试将我的模拟类声明为抽象类,但无济于事。

编辑请注意,公开该方法会导致测试运行没有问题......这很奇怪,因为使用 JMockit 您应该能够模拟任何范围的方法。

回答只有模拟方法需要公开,您可以保持原始方法不变。

0 投票
6 回答
2069 浏览

c# - 如何对 MVC UserViewControl 进行单元测试?

我一直在尝试为 ASP.NET MVC 中的 UserViewControl 编写单元测试。我想得到看起来像这样的代码:

不幸的是,无论我尝试什么,我都会从 RenderView 深处得到错误。这是由静态 HttpContext.Current 对象无用引起的(据我所知) - 我NullReferenceExceptionSystem.Web.UI.Page.SetIntrinsics.

我尝试使用 Phil Haack 的HttpSimulator,它给了我一个 HttpContext 对象,但我发现我还需要指定一个假HttpBrowserCapabilities对象才能稍微进一步:

现在我得到了对该对象的属性访问异常。我尽可能多地嘲笑,但似乎无处可去。

有没有人设法完成这项工作?

0 投票
2 回答
10962 浏览

java - Jmock 如何与 HttpSession 和 HttpServletRequest 一起使用

我是 jmock 的新手,并试图模拟一个 HttpSession。我正进入(状态:

java.lang.AssertionError:意外调用:httpServletRequest.getSession() 未指定期望:您是否... - 忘记以基数从句开始期望?- 调用模拟方法来指定期望的参数?

测试方法:

@测试

我做了一些搜索,但我仍然不清楚这是如何完成的。感觉就像我错过了一些小块。任何有这方面经验的人都可以为我指明正确的方向。谢谢

0 投票
4 回答
45543 浏览

c# - 最小起订量文档在哪里?

我在哪里可以找到 MOQ 的综合文档?我刚开始嘲笑,我很难理解它。我已经阅读了http://code.google.com/p/moq/wiki/QuickStart上的所有链接,但似乎找不到教程或温和的介绍。

我还简要地查看了 Rhino Mocks,但发现它非常令人困惑。


是的 - 我读过 Stephen Walthers 的文章 - 非常有帮助。我也浏览了链接。我似乎无法在http://www.bestechvideos.com/2008/06/08/dimecasts-net-introduction-to-mocking-with-moq 观看视频[断开链接]

具体来说,我试图确定是否从模拟类中引发了一个事件。我无法编译 QuickStarts 页面上的事件示例。在 google 组中,Daniel 解释说 CreateEventHandler 只能处理 type 的事件EventHandler<TEventArgs>,但即使这样我也无法编译代码。

更具体地说,我有一个实现INotifyChanged.

如何模拟课程以测试PropertyChanged事件是否被触发?我无法重写事件,public event EventHandler<PropertyChangedEventArgs>因为我收到此错误:

错误 1 ​​'CoreServices.Notifier' 没有实现接口成员 System.ComponentModel.INotifyPropertyChanged.PropertyChanged'。“CoreServices.Notifier.PropertyChanged”无法实现“System.ComponentModel.INotifyPropertyChanged.PropertyChanged”,因为它没有“System.ComponentModel.PropertyChangedEventHandler”的匹配返回类型。

0 投票
6 回答
2393 浏览

java - 如何模拟实例化为局部变量的类

我正在为调用一些 DAO 类以对数据库执行操作的业务方法编写测试。

这个方法,首先从 DataSource 对象中检索一个 JDBC 连接,将相同的连接传递给所有 DAO 实例,所以我可以用它来控制事务。因此,如果一切正常,我必须通过连接对象调用 commit()。

我想测试是否调用了 commit(),所以我想创建一个检查它的期望(我正在使用 JMock)。但由于 Connection 类不是我的 Business 类的直接邻居,我不知道该怎么做。

有人知道如何克服这个吗?有一些 JMock 工具可以解决这个问题,还是有一些替代设计可以克服这个问题?

谢谢

0 投票
2 回答
2330 浏览

.net - rhino-mocks - 很好的示例应用程序

我知道有几个关于 rhino-mocks 教程的问题。但我想知道是否有任何示例应用程序在使用 ado.net 的 n 层业务应用程序的上下文中使用 rhino-mocks。

我觉得 tutes 很好,但它们似乎并没有把所有东西都放在一起。因此,我正在寻找一个能够将全貌结合在一起的示例应用程序。

另外,我认为缺少专门处理模拟和测试数据访问层中的逻辑的示例。

干杯安东尼

0 投票
6 回答
5177 浏览

asp.net - 模拟 HttpContext 不起作用

我正在尝试模拟 HttpContext 以便我可以对控制器的 Request.IsAuthenicated 调用进行单元测试。我正在使用我在 Scott Hanselman 的博客中找到的代码来使用 rhino.mocks 来模拟 HttpContext。所以我有这个单元测试片:

在我的控制器操作中, if(Request.IsAuthenticated).... 当我尝试运行单元测试时,测试失败并抛出空异常,当我尝试调试单元测试时,我看到 HttpContext 从未分配给控制器。有任何想法吗?