- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先是问题的原因——pymox官方文档: https://code.google.com/p/pymox/wiki/MoxDocumentation
MockAnything 部分中有一条声明告诉“除非绝对必要,否则不要使用它!”。我很感兴趣,这是为什么?它有一些限制吗?我个人觉得它非常有用。
我有以下情况:我在我的类中有一个模块的引用,该模块有一堆我的类使用的模块级函数。
import db
class A(object):
def __init__(self):
# To make possible dependency injection.
self.db = db
...
class Test_A(object):
def test(self):
a = A()
# Perform an injection.
a.db = mox.CreateMockAnything()
# Setting an expectation to any function
a.db.some_func().AndReturn(5)
...
因为这是一个模块,所以我不能用 CreateMock() 模拟它,因为这不是一个类型。因此,我使用了非常适合这种情况的 CreateMockAnything()。我知道我可以 stub 模块函数:
self.mox.StubOutWithMock(module_to_mock, 'FunctionToMock')
module_to_mock.FunctionToMock().AndReturn(foo)
但是我不喜欢这种方式,因为这里我每次需要做两个 Action 。在类中引用模块并使用 CreateMockAnything 模拟它会更简单、更漂亮。
如果我错误地打印了一些函数名,期望就会失败(因为被测试的代码正在调用正确的代码),所以这不是重点......
对于 StubOutWithMock:如果我不会注意到测试方法中的一些额外的 db 函数调用,并且不会对其进行 stub StubOutWithMock,它将调用真实代码并且在数据库中留下了一些垃圾。因此,还有一点可以保护我的解决方案 - 使用 CreateMockAnything 而不是 stub 特定方法让我可以完全切断我的数据库依赖性,而且我还会看到 MockAnything 模拟抛出的意外方法调用异常。
那么避免使用 CreateMockAnything() 的原因是什么?
谢谢,
最佳答案
这样做的主要原因是,在可能的情况下,仅使用具有明确定义的接口(interface)的对象通常是良好的编程习惯。
根据我在您的案例中看到的情况,这是一个完全可以接受的用例。
关于python - Mox(pymox)框架的CreateMockAnything()的优缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18662179/
我有一个函数 A 多次调用另一个函数 B。我想以这样一种方式模拟 B,即 任何数量 具有正确参数数量的调用,无论值如何,都将返回一个固定值并被视为正确。 函数是否被调用或被调用多少次不是规范的一部分。
我有一个类: class MyClass(object): @property def myproperty(self): return 'hello' 使用 mox和
我想检查是否使用字符串调用函数 - 但是,如果使用“%s”创建该字符串来插入子字符串,似乎会有所不同。测试失败并出现以下错误: UnexpectedMethodCallError: Unexpecte
背景 我有一个库,它使用 HTTPoison 来实现我需要测试的某些功能。为此,我使用 Mox ,我相信它是 Elixir 的通用模拟库(尽管还有其他这个库有 José Valim 的批准印章) 问题
首先是问题的原因——pymox官方文档: https://code.google.com/p/pymox/wiki/MoxDocumentation MockAnything 部分中有一条声明告诉“除
我正在尝试编写一个 mox 测试来读取电子表格(4 列)、获取提要并将特定列(2 列)写入 CSV 文件。我试图通过获取列表提要的第一步,我的代码如下: class SpreadsheetReader
我正在尝试测试我是否正确地转换了从第三方 api 返回的数据。我在使用 Mox 时遇到了一些麻烦,因为我需要在数据转换期间点击两个单独的端点。让我通过发布代码更清楚地解释: 测试: test "p
我正在测试一个函数,该函数从一个辅助对象获取骨架对象,使用第二个辅助对象对其进行修改,然后将修改后的对象传递回第一个辅助对象。类似的东西: class ReadModifyUpdate(object)
我想在 init 方法调用的类中 stub 一个方法。 class MyClass(object): def __init__(self): # Some initializer code
我正在尝试在我的 Elixir 项目中使用名为 Mox 的模拟库,但即使遵循官方文档: https://hexdocs.pm/mox/Mox.html 我无法为我的模块函数定义新的行为。尝试运行测试时
我最近开始使用 Nose 进行单元测试。它非常好,除了有时发生错误时它会以一种非常奇怪的方式打印出错误信息。它把它分成每行 1 个字符,然后用行号打印出来。有谁知道如何解决这个问题? ....F...
我是一名优秀的程序员,十分优秀!