print success messages for asserts in python

ε祈祈猫儿з 提交于 2020-01-11 06:56:41

问题


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 custom success message when the assert condition passes?

I am using py.test framework.

for instance:

assert self.clnt.stop_io()==1, "IO stop failed"

for the above assert I get message "IO stop failed" if assert fails but I am looking to have "IO stop succeeded" if assert passes. something like this:

 assert self.clnt.stop_io()==1, "IO stop failed", "IO stop succeeded"

回答1:


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")



回答2:


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



回答3:


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"



回答4:


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.




回答5:


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


来源:https://stackoverflow.com/questions/36834677/print-success-messages-for-asserts-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!