问题标签 [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 投票
3 回答
1071 浏览

c# - 将方法设为虚拟有什么危险?

我一直在用 RhinoMocks 进行一些模拟,它要求将模拟的方法设为虚拟。这很好,除非我们有一个自定义框架,其中包含我要模拟的方法,这些方法当前未标记为虚拟。

我无法预见将这些方法设为虚拟会有任何问题,但我想知道将方法设为虚拟有哪些潜在危险需要注意?

0 投票
4 回答
1422 浏览

mocking - 何时使用部分模拟?

我开始对假货、存根、模拟和动态模拟的想法感到满意。但是我对何时使用部分模拟的理解仍然有些不确定。

如果您打算模拟一项服务并且需要使用部分模拟,那么这似乎是设计不佳的标志。是否部分模拟主要用于在测试覆盖范围内获取遗留代码?

另一方面,假设我正在测试一个具有 Reset() 方法的类。如果我已经在单独的测试中确认 Reset() 方法有效,并且类的某些功能应该以调用此方法结束,那么对对象进行部分模拟并运行是否是糟糕的测试设计针对部分模拟进行测试,在 Reset() 方法上定义一个期望。

我目前有几个以这种方式设置的测试,这种事情以后会给我带来麻烦吗?

0 投票
2 回答
323 浏览

unit-testing - 我应该模拟哪个对象?

我正在写一个存储库。获取对象是通过 DAO 完成的。创建和更新对象是通过一个 Request 对象完成的,该对象被赋予一个 RequestHandler 对象(一个命令模式)。我没有编写 DAO、Request 或 RequestHandler,所以我无法修改它们。

我正在尝试为此存储库编写测试。我已经模拟了 DAO 和 RequestHandler。我的目标是让模拟的 RequestHandler 简单地将新的或更新的对象添加到模拟的 DAO。这将产生我正在与数据库交谈的错觉。这样,我不必为调用此存储库的所有类模拟存储库。

问题是 Request 对象是这个字符串 blob 和各种字母数字代码的 gob。我很确定 XML 也参与其中。这有点乱。另一位开发人员正在编写代码以根据所存储的对象创建 Request 对象。而且由于 RequestHandler 接收请求而不是我存储的对象,因此它无法更新模拟的 DAO。

所以问题是:我是否也要模拟请求,还是应该等到其他人,他有点慢,在我编写测试之前完成他的代码?或者在测试调用存储库的类时搞砸并模拟整个存储库?

顺便说一句,我说的“模拟”不是 NMock 意义上的,而是像用内存中的集合来伪造数据库一样。

0 投票
7 回答
112583 浏览

database - 单元测试数据库驱动应用程序的最佳策略是什么?

我使用许多由后端复杂程度不同的数据库驱动的 Web 应用程序。通常,有一个独立于业务和表示逻辑的ORM层。这使得对业务逻辑进行单元测试相当简单;事物可以在离散模块中实现,并且测试所需的任何数据都可以通过对象模拟来伪造。

但是测试 ORM 和数据库本身总是充满问题和妥协。

多年来,我尝试了一些策略,但没有一个完全让我满意。

  • 使用已知数据加载测试数据库。针对 ORM 运行测试并确认返回正确的数据。这里的缺点是您的测试数据库必须跟上应用程序数据库中的任何模式更改,并且可能会不同步。它还依赖于人工数据,并且可能不会暴露由于愚蠢的用户输入而发生的错误。最后,如果测试数据库很小,它不会像缺少索引那样显示效率低下。(好吧,最后一个并不是真正应该用于单元测试的,但它并没有什么坏处。)

  • 加载生产数据库的副本并对其进行测试。这里的问题是您可能不知道在任何给定时间生产数据库中有什么。如果数据随时间变化,您的测试可能需要重写。

有人指出,这两种策略都依赖于特定的数据,单元测试应该只测试功能。为此,我看到建议:

  • 使用模拟数据库服务器,并仅检查 ORM 是否发送正确的查询以响应给定的方法调用。

您使用了哪些策略来测试数据库驱动的应用程序(如果有的话)?什么对你最有效?

0 投票
3 回答
4719 浏览

c# - TDD 和模拟 TcpClient

人们如何模拟 TcpClient(或 TcpClient 之类的东西)?

我有一个接受 TcpClient 的服务。我应该用其他更可笑的东西来包装它吗?我应该如何处理这个?

0 投票
7 回答
42881 浏览

c# - 如何用静态方法模拟?

我是模拟对象的新手,但我知道我需要让我的类实现接口才能模拟它们。

我遇到的问题是,在我的数据访问层中,我想要静态方法,但我不能将静态方法放在接口中。

解决这个问题的最佳方法是什么?我应该只使用实例方法(这似乎是错误的)还是有其他解决方案?

0 投票
9 回答
9172 浏览

iphone - OCUnit 和 OCMock 可以在 iPhone SDK 上工作吗?

我根本无法让它工作,我想知道我是在浪费时间,还是我只是愚蠢!

抱歉,我现在没有确切的错误。但我只想知道它是否有效!

0 投票
2 回答
9698 浏览

mocking - 模拟 Iidentity 和 IPrincipal

我只想问在我的单元测试中提供这些对象的更好方法是什么。

在我的单元测试中,我正在测试 CSLA 对象。CSLA 对象在内部使用 ApplicationUser 对象的一种属性和一种方法。ApplicationUser 继承自 IPrincipal。属性是: 1) ApplicationContext.User.IsInRole(...) - 该方法是 IPrincipal 的一部分 2) ApplicationContext.User.Identity.Name - 名称是 IIdentity 的属性,它是 ApplicationUser aka IPricipal 的一部分

我的测试示例(使用 RhinoMock):

我对第二个值(身份名称)有一点问题。我试图模拟它,但在将模拟的 IIdentity 分配给 ApplicationUser 时遇到问题,因为它是在内部完成的。有人告诉我自己创建一些 IIPrincipal(包括 IIdentity),根本不要嘲笑它。这是肯定可以做到的。不确定这是否可以称为存根使用?

那么你能建议我如何处理 IPrincipal 和 IIdentity 吗?任何建议都非常受欢迎。

0 投票
3 回答
4500 浏览

java - How to mock the InitialContext class with jmockit?

I'm using jmockit with my tests and with one class I wish to test, uses InitialContext directly. So I have the following:

In my test case, I call this to use my "mocked" InitialContext class:

What is the best way to mock the InitialContext class with jmockit.

I've already tried a few ways (such as using my own MockInitialContextFactory), but keeping stumbling into the same error:

From what I can see on Google, mocking with JNDI is quite nasty. Please can anyone provide me with some guidance, or point me to a solution? That would be much appreciated. Thank you.

0 投票
7 回答
22002 浏览

asp.net-mvc - ASP/NET MVC:带会话的测试控制器?嘲讽?

我在这里阅读了一些答案:测试视图和控制器以及模拟,但我仍然无法弄清楚如何测试读取和设置会话值(或任何其他基于上下文的变量)的 ASP.NET MVC 控制器。如何为我的测试方法提供(会话)上下文?是在嘲讽答案吗?有人有例子吗?基本上,我想在调用控制器方法并让控制器使用该会话之前伪造一个会话。有任何想法吗?