问题标签 [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.
c# - 将 Web 上下文传递给 ASP MVC 应用程序中的“服务”
我正在尝试找出一种将 Web 当前 http 上下文传递给服务类(或使用对它的引用来初始化类)的方法。我这样做是为了将应用程序的其余部分从需要了解有关 http 上下文的任何信息中抽象出来。
我还希望该服务可以使用 TDD 进行测试,可能使用 Mockable 框架之一。因此,最好使用接口而不是实际的类。
我想实现的一个例子:
我遇到的主要问题之一是没有 IHttpContext,.net http 上下文是无法模拟的抽象类的子类(容易吗?)。
另一个问题是我无法初始化类的全局实例,因为上下文与大多数请求无关。
我可以使类静态,并要求将上下文传递给每个函数,因为它被称为即
但这并没有使这个类更容易测试,我仍然需要创建一个 HttpContext 并且另外任何想要使用这个类的非 Web 感知服务突然需要能够检索要求它们紧密耦合的 Context到网络服务器——首先想要创建这个类的全部原因。
我对所有建议持开放态度——尤其是那些人们知道有助于轻松进行 tdd 测试的建议。人们会建议我如何解决这个问题?
干杯
c# - 如何最小起订量索引属性
我试图模拟对索引属性的调用。即我想起订量以下:
以及设置器值
我这样做是因为我需要模拟我的应用程序使用的类的功能。
有谁知道如何用最小起订量做到这一点?我尝试了以下变体:
但这不编译。
我想通过最小起订量实现什么,有人有我如何做到这一点的例子吗?
.net - Rhino Mocks - 为非虚拟方法设置结果
我正在玩 Rhino Mocks,并试图在我的模拟对象上设置一些虚拟结果,所以当它们在我的工厂方法中被调用时,我不必担心数据。
但是我遇到了一个障碍,我想要获得虚拟结果的方法会导致异常,因为它们不是virtual。
我有这样的代码:
该SomeMethod
方法是否必须是虚拟的才能获得模拟结果?
SetupResult.For
另外,和有什么区别Expect.Call
?
php - 在 PHPUnit 中模拟对象以模拟静态方法调用?
我正在尝试测试一个管理数据库中数据访问的类(本质上是 CRUD)。我们使用的 DB 库恰好有一个 API,您首先通过静态调用获取表对象:
...你明白了。
我们正在尝试测试此方法,但要模拟 DataObject 的东西,以便 (a) 我们不需要实际的数据库连接来进行测试,并且 (b) 我们甚至不需要包含 DB_DataObject 库来进行测试.
但是,在 PHPUnit 中,我似乎无法让 $this->getMock() 适当地设置静态调用。我有...
...但测试仍然显示未知方法“工厂”。我知道它正在创建对象,因为在它说找不到 DB_DataObject 之前。现在可以了。但是,没有办法吗?
我真正想做的是有两个模拟对象,一个也用于返回的表对象。所以,我不仅需要指定 factory 是一个静态调用,还需要它返回一些我已经设置的指定的其他模拟对象。
我应该提醒一下,我不久前在 SimpleTest 中做过这个(找不到代码)并且效果很好。
是什么赋予了?
[更新]
我开始明白它与expects()有关
unit-testing - 伪造,嘲笑和存根之间有什么区别?
我知道我如何使用这些术语,但我想知道是否有公认的faking、mocking和stubbing定义用于单元测试?你如何为你的测试定义这些?描述您可能使用每种情况的情况。
以下是我如何使用它们:
Fake:实现了接口但包含固定数据且没有逻辑的类。根据实现简单地返回“好”或“坏”数据。
Mock:一个实现接口并允许动态设置值以返回/异常以从特定方法抛出的能力并提供检查特定方法是否已调用/未调用的能力的类。
Stub:类似于模拟类,只是它不提供验证方法是否已被调用/未调用的能力。
模拟和存根可以手动生成或由模拟框架生成。假类是手工生成的。我主要使用模拟来验证我的类和依赖类之间的交互。一旦我验证了交互并通过我的代码测试备用路径,我就会使用存根。我主要使用假类来抽象出数据依赖关系,或者当模拟/存根太繁琐而无法每次设置时。
c# - 使用 Moq 确定是否调用了方法
据我了解,如果我调用更高级别的方法,我可以测试是否会发生方法调用,即:
我想测试一下,如果我打电话,SomeMethod()
那么我希望SomeOtherMethod()
会被调用。
我认为这种测试在模拟框架中可用吗?
unit-testing - Moq-ing 类或接口有什么区别?
我一直在使用moq在我的单元测试中模拟对象,并且我在网站上看到关于 moq 的信息,它能够模拟类和接口。
前几天我和我的一个同事讨论过,他们说没有理由模拟类,我应该只模拟接口。
我对此并没有真正的答案....而且我似乎也无法在起订量网站上找到任何答案。
一个人永远不应该模拟课程,这是真的吗?我会说不,因为如果这是真的,那么 Moq 甚至都不会允许它......那么有没有时候在接口上模拟一个类更好?模拟类与模拟接口有什么区别?或者它真的只是一种偏好?
python - 尽管极度懒惰,我如何在 Python 中模拟 IMAP 服务器?
我很想知道是否有一种简单的方法可以imaplib
在 Python 中模拟 IMAP 服务器(一个模块),而无需做很多工作。
有预先存在的解决方案吗?理想情况下,我可以连接到现有的 IMAP 服务器,进行转储,然后让模拟服务器脱离真实的邮箱/电子邮件结构。
懒惰的一些背景:我有一种讨厌的感觉,我正在编写的这个小脚本会随着时间的推移而增长,并且想创建一个合适的测试环境,但考虑到它可能不会随着时间的推移而增长,我不想这样做让模拟服务器运行需要做很多工作。
java - JMockit 中有没有办法从模拟方法调用原始方法?
在我的模拟类中,我正在模拟方法 foo()。对于某些测试用例,我希望 foo() 的模拟实现返回一个特殊值。对于其他测试用例,我想使用 foo() 的真正实现。我在我的模拟类中定义了一个布尔值,以便我可以在模拟方法中确定是要返回特殊值还是使用“真实”方法。问题是,我似乎无法弄清楚如何从模拟方法中调用真正的方法。
我发现您可以在名为“it”的模拟对象中定义一个特殊成员(具有被模拟对象的类型)。这允许您从模拟实现中引用真实的类。所以,我的计划是,如果我需要调用 foo() 的“真实”实现,模拟方法将调用 it.foo()。但是,这不起作用,因为调用 it.foo() 只是再次调用模拟版本,而不是真实版本,所以我最终得到了无限递归。
有什么办法可以使这项工作?
编辑:使用代码示例可能会更清楚,这是我当前的模拟方法实现的样子:
编辑 2:另外,对于我的大多数测试用例,我不想要模拟实现。所以我最初的尝试是只在我需要模拟对象的那些测试用例中调用 Mockit.redefineMethods() 。但这不起作用 - 似乎你只能在 setup/teardown 中做到这一点......当我尝试这样做时,我的模拟实现从未被调用过。
解决方案注意事项:
起初我不认为给出的答案有效,但在玩了一些之后,似乎问题在于我将 JMockit “核心”方法与“注释”驱动方法混合在一起。显然,在使用注释时,您需要使用 Mockit.setupMocks,而不是 Mockit.redefineMethods()。这就是最终奏效的方法:
然后,对于模拟类:
unit-testing - 使用 ExpectSet() 和 It.Is 进行最小起订量测试() 的行为不符合...预期
我已将行为隔离到以下测试用例中。我会感谢任何能告诉我如何期待/验证属性集的人List<T>
- 似乎里面发生了一些事情,It.Is<T>(predicate)
现在对我来说没有多大意义。示例代码将作为 VS2008 中的控制台应用程序运行 - 您需要添加对 Moq 2.6 的引用(我在 2.6.1014.1 上) - 请尝试取消注释不同的 ExpectSet 语句以查看发生了什么...