print success messages for asserts in python

前端 未结 5 1049
Happy的楠姐
Happy的楠姐 2020-12-19 14:04

I am using assert in python. Every time an assert fails I get the failure message which I would have put there to be printed. I was wondering if there is a way to print a cu

相关标签:
5条回答
  • 2020-12-19 14:14

    I would combine @dashingdw and @Reblochon Masque solution

    def my_assert(condition, fail_str, suc_str):
        assert condition, fail_str
        print suc_str   
    

    From my point of view this is less "dangerous" and you don't need to insert an additional print line every time.

    0 讨论(0)
  • 2020-12-19 14:26

    Yes, the simplest is surely to place a print below the assert:

    assert self.clnt.stop_io()==1, "IO stop failed"
    print("IO stop passed at location ==1")
    
    0 讨论(0)
  • 2020-12-19 14:28

    This has been added to the pytest module as the hook pytest_assertion_pass

    in your conftest.py

    def pytest_assertion_pass(item, lineno, orig, expl):
    log.info("asserting that {}, {}, {}, {}".format(item, lineno, orig, expl))
    

    and in pytest.ini

    enable_assertion_pass_hook = true
    
    0 讨论(0)
  • 2020-12-19 14:30

    Write a simple helper function:

    def myfunc(msg='assert OK'):
        print msg
        return True
    

    Include that in the condition on the right-side, after an and:

    assert self.clnt.stop_io()==1 and myfunc("IO stop succeeded"), "IO stop failed"
    
    0 讨论(0)
  • 2020-12-19 14:32

    If you are really feeling adventurous, you can just write your own extensible assert wrapper - with which you can count the number of asserts failed or add functionality like testing in quiet or verbose modes eg:

    def assert(condition, fail_str, suc_str):
         if condition:
              print fail_str
         else:
              num_tests_passed = num_tests_passed + 1
              if verbose_enabled:
                  print suc_str
    
    0 讨论(0)
提交回复
热议问题