如何检查是否正在通过鼻子测试运行代码?

Bri*_*tow 7 python nose

我有一些用于单元测试的代码.但是,它加载的库需要一些鼻子测试实际上不需要的数据,因为这些数据被单元测试模拟出来.我想保护库中的文件读取,以便在进行鼻子测试的情况下不会调用它们.

是否有捷径可寻?

我可以用sys.modules或初始命令行做一些事情,但我更喜欢更优雅的东西,如果它存在的话.

Bri*_*tow 8

正如评论中提到的,这段代码的结构是一团糟,测试的一部分是确保我在重构时不会破坏...

那么,就目前而言,(除非有人给我一个更好的答案),我正在使用:

if 'nose' not in sys.modules.keys():
    <read the data>
Run Code Online (Sandbox Code Playgroud)


Łuk*_*ski 2

正确的方法是用空模拟来模拟所有具有副作用的代码(我假设您不想要什么)。

给定tested_module my_module:

def do_something_and_destroy_world():
    destroy_world()
    return None
Run Code Online (Sandbox Code Playgroud)

示例测试文件是:

import mock
import unittest

import my_module

class MyTest(unittest.TestCase):
    def testSomethingUgly(self):
        with mock.patch('my_module.destroy_world', return_value=None):
            result = do_something_and_destroy_world()
            self.assertIsNone(result)
Run Code Online (Sandbox Code Playgroud)

当测试运行时,断言将是正确的,并且destroy_world不会被调用 - 相反,它将被替换为具有固定返回值的空模拟。