W unittest Dokumenty [http://docs.python.org/2/library/unittest.html#unittest.main] widzę sposób wytworzono następujące podpis opisanego:python unittest - Używanie opcji "buffer" do stdout stdout - jak mam to zrobić?
unittest.main([module[, defaultTest[, argv[, testRunner[, testLoader[, exit[, verbosity[, failfast[, catchbreak[, buffer]]]]]]]]]])
ostatni wariant jest „bufor”. Dokumenty wyjaśniają następujące informacje na temat tej opcji:
Parametry typu failfast, catchbreak i buffer mają taki sam efekt, jak opcje wiersza polecenia o tej samej nazwie.
Docs dla polecenia linii Opis [http://docs.python.org/2/library/unittest.html#command-line-options] wyjaśnienia „bufor” w następujący sposób:
-b --buffer
standardowe strumienie produktu i błąd standardowy są buforowane w trakcie badania biegać. Wynik testu przejścia jest odrzucany. Wyjście jest normalnie odbijane w wyniku błędu testu lub błędu i jest dodawane do komunikatów o błędach.
Mam następujący kod demo, które nie wykazują zachowania, które byłyby spodziewanych:
import unittest2
class DemoTest(unittest2.TestCase):
def test_one(self):
self.assertTrue(True)
def test_two(self):
self.assertTrue(True)
if __name__ == '__main__':
test_program = unittest2.main(verbosity=0, buffer=True, exit=False)
Wynikiem tego programu jest:
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
W rzeczywistości, otrzymuję ten sam wynik, jeśli zmienię ostatnią linię w moim programie na:
test_program = unittest2.main(verbosity=0, buffer="hello", exit=False)
Co robię źle? (Próbowałem za pomocą unittest
zamiast unittest2
, ale to nie miało znaczenia.)
Co chciałeś zobaczyć?Wygląda to całkowicie poprawnie - jest to wynik samego zestawu testów, bez żadnych wyników z testowanego kodu. Właśnie o to chodzi w 'buforze' i działa idealnie. (W twoim przypadku działa to również trywialnie - twój kod niczego nie wypisuje, więc nie ma nic do buforowania "bufora", dlatego bez niego uzyskujesz ten sam efekt.) Jeśli chcesz coś innego, powiedz nam _co chciałeś. – abarnert
Nie chcę widzieć żadnego wyjścia. Dokumenty mówią "Wyjście podczas testu zaliczenia jest odrzucane". Spodziewam się zobaczyć wyjście tylko wtedy, gdy test się nie powiedzie. Ponieważ używam tego przez crona, nawet pojedynczy znak wyjściowy jest dla mnie nie do przyjęcia, ponieważ spowoduje wysłanie e-maila. Na przykład słowa "OK" nie powinny się pojawiać. – jononomo
OK, rozumiem, co się teraz dzieje. Zasadniczo program nadal będzie produkował dane wyjściowe, a nie wynik uzyskany w metodach testowych. – jononomo