absl是Google开源的对C++和python标准库的扩充库。其中absltest可以替代python的unittest,它提供了更多方便的assert方法和测试相关的helper。但是今天遇到了一个问题,在这里记录一下:
test.py:
尝试运行测试:
可以看到没有任何问题。然而,如果使用python -m unittest来运行,就会出现如下报错:
原因是:absl支持用--test_tmpdir命令行参数指定临时目录的路径,因此会尝试读取--test_tmpdir的值。然而,absl.flag.FLAGS是在absltest.main()中解析的,python -m unittest并不会调用这段代码。因此会出现以上“尝试访问未解析的flag”的报错。
为了解决这个问题,可以在python -m unittest运行时将所有flag手动标记为已解析,这样一来测试会使用它们的默认值。
在setUpClass函数中判断一下flag是否被解析了,然后处理即可。使用python test.py或python -m unittest test.py都可以成功运行这个测试。