python - 当 Pyunit 和 Nose 测试失败时,为什么 py.test 通过单元测试(如预期的那样)?

标签 python unit-testing pytest

在编写 python 单元测试方面,我是一个全新的初学者,我知道在代码之前编写测试要好得多也容易得多,但我想我会从为 github 项目做出贡献并修复一些小问题开始,试一试。

我正在解决的一个问题是,如果没有为方法提供参数,它实际上会删除服务器上的参数。我应该提到这个项目是一个 REST API 的客户端。这很容易修复,但我认为为它编写一个测试会很好。

损坏方法的代码包含在一个类中:

def edit_device(self, device, nickname=None, model=None, manufacturer=None):
    data = {"nickname": nickname}
    iden = device.device_iden
    r = self._session.post("{}/{}".format(self.DEVICES_URL, iden), data=json.dumps(data))

然后我打算使用 Mock使用他们的文档作为指南来模拟 REST API 的响应(它包括示例响应)。

我遇到的问题是我已将测试编写为:

@mock.patch('pushbullet.pushbullet.requests.Session.get', side_effect=mocked_requests_get)
@mock.patch('pushbullet.pushbullet.requests.Session.post', side_effect=mocked_requests_post)
class TestPushbullet(object):

    def test_edit_device_without_nickname(self, mock_get, mock_post):
        pb = pushbullet.Pushbullet("API_KEY")
        device = pb.devices[0]
        new_device = pb.edit_device(device)
        assert new_device.nickname == device.nickname

这似乎工作正常,方法 mocked_requests_getmocked_requests_post被调用。如果我使用 pyUnit 在 Eclipse PyDev 中运行此测试来运行 pytest - 它会失败,正如我所料。如果我使用 Nose 运行测试它也会失败,再次完美。如果我在命令行上使用 py.test 运行测试,它会通过。

如果我使用 pytest.set_trace()作为 mocked_requests_post 中的第一行我可以打印args它表明昵称实际上不是 None 并且仍然设置为它在服务器上的内容(即 device.nickname 所以断言通过)

我一生都无法弄清楚为什么 py.test 没有从 self._session.post 中获取 json 中的更改.如果我更改 URL 格式中的 ide,它确实会接受该更改,但不会更改数据主体。

我做错了什么吗?我不明白为什么 py.test 会通过而 Nose 会在相同的代码上失败。

编辑:在命令行上我正在运行 py.test path/to/single_test_file.py并且测试文件只有我在上面粘贴的单一测试方法。

最佳答案

终于解决了,我必须在决定编写测试之前将客户端包安装到 python 中。看起来像命令行 py.test因此,从真正的源(通过 pip install)读取客户端包,而 IDE 从我在 eclipse 中的开发包中读取它。

解决方法是删除包:pip uninstall <package>重新安装开发包:pip install -e . (在根开发目录中时)

关于python - 当 Pyunit 和 Nose 测试失败时,为什么 py.test 通过单元测试(如预期的那样)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34832582/

相关文章:

python - 使用ffmpeg在python中命令行关闭太快

用于单元测试的 iOS 10 核心数据存储在内存中

python - 测试 : parametrize test cases from classes

python - 如何在pytest中抑制第三方日志

python - Python Dataframe 中的多个 If 语句

python - py2exe 与应用程序的不同部分

python - 将文件中的字符串分组到字典中

database - 针对大型数据库的单元测试

测试属性的 Pythonic 方法?

python - 如何从 "python setup.py test"运行 unittest discover ?