У меня есть ошибка на стадии становления, которую я должен разыскать завтра. Я знаю предыдущий hg пересмотр, который был хорош, таким образом, я думаю об использовании hg, делят пополам.
Однако я нахожусь в Windows и не хочу входить в сценарии DOS.
Идеально, я смог бы записать, что модульный тест Python и иметь hg делит пополам использование это. Это - моя первая попытка.
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
Существует ли лучший способ сделать его? Спасибо за любой совет.
Спасибо всем, особенно Уиллу Маккатчену. Решение, которое сработало лучше всего, приведено ниже. .
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
Я думаю, что вы можете удалить вашу функцию main()
и использовать следующий блок для запуска тестов:
if __name__ == '__main__':
unittest.main()
Вызов unittest. main()
запустит тесты, которые он найдет в этом файле, и выйдет с соответствующим кодом состояния в зависимости от того, прошли все тесты или нет.
Если в вашем распоряжении есть инструменты unix, обратите внимание, что 'grep' устанавливает свой статус выхода полезным образом. Так что если ваш модульный тест печатает "PASS", когда он проходит, вы можете сделать:
hg bisect -c './unittest | grep PASS'
и это будет работать довольно хорошо.