如何使用os.path编写跨平台单元测试?
我想写一个简单的单元测试,使用 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
模块。
由于不同的操作系统有不同的路径命名规则,标准库中有几个版本的这个模块。
问题
有没有办法导入特定版本的 os.path
?
我已经尝试将 sys.platform
设置为 win32
。
当然,我可以检查当前的平台,然后只运行其中一个测试——但我在想有没有办法同时运行两个测试。
1 个回答
1
你应该始终使用 /
作为路径分隔符。Python 会自动把它转换成你所在平台的正确分隔符。
\
是用来开始转义序列的。如果你使用 /
,就不需要使用原始字符串来禁用 \
的转义序列(就像你帖子中的第二个字符串那样)。
在原始字符串中使用 \
可能会导致 os.path
的方法表现得很奇怪(而且只在 Windows 平台上有效)。