Python单元测试:忽略我想测试代码中的导入

3 投票
3 回答
3637 浏览
提问于 2025-04-16 00:00

我有一个Python程序,它导入了pythoncom(并使用了其中的pythoncom.CoCreateInstance)。我想为这个程序的逻辑写一个单元测试,但不想让它导入pythoncom(这样我就可以在Linux上运行测试)。

我有哪些选择呢?我能在不修改被测试系统的情况下做到这一点吗?

到目前为止,我发现的内容是:

sys.modules["pythoncom"] = "test"
import module_that_imports_pythoncom

我遇到的问题是,如果我有:

from pythoncom.something import something

我会得到:

ImportError: No module named something.something

而且 sys.modules["something.something"]sys.modules["pythoncom.something.something"] 也不管用。

有什么想法吗?

3 个回答

0

好的,如果你在测试中修改了 PYTHONPATH,并在一个测试目录下创建了一个新的包,叫做 pythoncom,里面有必要的子目录,这样会怎么样呢?

1

如果你需要运行一些测试,而这些测试实际上依赖于操作系统,你可以考虑使用这些装饰器,比如:

def run_only(func, predicate):
    if predicate():
        return func
    else:
        def f(*args, **kwargs): pass
        return f


def run_only_for_linux(func):
    pred = lambda: sys.platform == 'linux2'
    return run_only(func, pred)


@run_only_for_linux
def hello_linux():
    """docstring"""
    print("hello linux")

这样一来,你就可以声明这个测试只在Linux系统上运行,而不需要在测试代码里增加复杂的内容。

0

你可以把 import pythoncom 放在一个 try except 代码块里。

撰写回答