如何使用os.path编写跨平台单元测试?

2 投票
1 回答
650 浏览
提问于 2025-04-17 20:27

我想写一个简单的单元测试,使用 os.path.basename

示例

def test(path):
    return os.path.basename(os.path.normpath(title))

...

result = test('/path/foo')
assert result == 'foo'

result = test(r'c:\Users\Foo\Documents\foo')
assert result == 'foo'

问题

在Linux上运行时,第二个测试(Windows路径)失败了。
我猜第一个测试在Windows上也会失败。
这其实是有道理的,因为不同的操作系统有不同的 os.path 模块。

Python文档

由于不同的操作系统有不同的路径命名规则,标准库中有几个版本的这个模块。

问题

有没有办法导入特定版本的 os.path?
我已经尝试将 sys.platform 设置为 win32

当然,我可以检查当前的平台,然后只运行其中一个测试——但我在想有没有办法同时运行两个测试。

1 个回答

1

你应该始终使用 / 作为路径分隔符。Python 会自动把它转换成你所在平台的正确分隔符。

\ 是用来开始转义序列的。如果你使用 /,就不需要使用原始字符串来禁用 \ 的转义序列(就像你帖子中的第二个字符串那样)。

在原始字符串中使用 \ 可能会导致 os.path 的方法表现得很奇怪(而且只在 Windows 平台上有效)。

撰写回答