我有一个紧急的错误,我明天要跟踪。我知道之前的hg版本很好,所以我正在考虑使用hg bisect。
但是,我在Windows上并且不想进入DOS脚本。
理想情况下,我可以编写Python单元测试并使用hg bisect。这是我的第一次尝试。
bisector.py
#!/usr/bin/env python
import sys
import unittest
class TestCase(unittest.TestCase):
def test(self):
#raise Exception('Exception for testing.')
#self.fail("Failure for testing.")
pass
def main():
suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestCase)
result = unittest.TestResult()
suite.run(result)
if result.errors:
# Skip the revision
return 125
if result.wasSuccessful():
return 0
else:
return 1
if '__main__' == __name__:
sys.exit(main())
也许我可以跑:
hg bisect --reset
hg bisect --bad
hg bisect --good -r 1
hg bisect --command=bisector.py
有更好的方法吗?谢谢你的任何建议。
答案 0 :(得分:10)
感谢所有人,尤其感谢Will McCutchen。 效果最好的解决方案如下。
bisector.py
#!/usr/bin/env python
import unittest
class TestCase(unittest.TestCase):
def test(self):
# Raise an assertion error to mark the revision as bad
pass
if '__main__' == __name__:
unittest.main()
困难的部分是让hg bisect命令正确:
hg update tip
hg bisect --reset
hg bisect --bad
hg bisect --good 0
hg bisect --command ./bisector.py
或在Windows上,最后一个命令是:
hg bisect --command bisector.py
答案 1 :(得分:4)
我认为您可以删除main()
函数并使用以下块来运行测试:
if __name__ == '__main__':
unittest.main()
对unittest.main()
的调用将运行它在此文件中找到的测试,并使用适当的状态代码退出,具体取决于所有测试是通过还是失败。
答案 2 :(得分:1)
如果您有一些unix工具可供使用,请注意'grep'以有用的方式设置其退出状态。因此,如果您的单元测试在通过时打印“PASS”,您可以执行以下操作:
hg bisect -c './unittest | grep PASS'
这样做非常好。