【发布时间】:2016-03-22 19:12:35
【问题描述】:
所以我正在尝试导入一个模块,并从该模块中的一个类中测试方法。
这是一个方法的例子。
def production_warning(self, targetenv):
if targetenv == 'prdv':
prodwarning1 = raw_input("WARNING: You are deploying to the production environment. Are you sure you want to do this? Y/N: ").upper()
if prodwarning1 == "N":
sys.exit()
prodwarning2 = raw_input("DEPLOYING TO PRDV, ARE YOU REALLY, REALLY SURE? Y/N: ").upper()
if prodwarning2 == "N":
sys.exit()
else:
return True
这是我正在尝试编写的测试示例。
def production_warning():
try:
assert test.production_warning('prdv') is not errors
assert test.validate_params('fakeenv') is errors
print "Test Passed {0}/5: validate_params".format(counter)
test_db_refresh()
except:
print "Test Failed {0}/5: validate_params".format(counter)
test_db_refresh()
def db_refresh_prompt():
# assert test.db_refresh_prompt() is not errors
global counter
counter += 1
print "Test Passed {0}/5: db_refresh_prompt".format(counter)
production_warning()
db_refresh_prompt()
etc()
如何检查是否引发了错误?在一天结束时,我试图通过所有这些测试和每个功能,如果没有引发异常,打印“成功”。如果引发异常,请继续进行下一个测试。人们似乎一直在向我指出“如果有异常,调用你的函数将自动引发异常”的方向,但这会在抛出异常时停止我的测试,我不希望这样,我想继续下一个测试。
我可以通过以下方式解决这个问题:
def validate_params():
try:
assert test.validate_params('hackenv-re', 'test.username') is not errors
assert test.validate_params('fakeenv', 'test.username') is errors
assert test.validate_params('hackevn-re', 'vagrant') is errors
global counter
counter += 1
print "Test Passed {0}/5: validate_params".format(counter)
test_db_refresh()
except:
print "Test Failed {0}/5: validate_params".format(counter)
test_db_refresh()
但这似乎首先违背了使用 unittest 的目的?我认为使用 unittest 我可以断言是否引发异常并返回一个 T/F,我可以用它做任何我想做的事情。
希望这是足够的信息。
根据给出的许多答案,我假设 unittest 没有内置任何东西可以让我做 assertRaise(我相信这在 Django 中使用)
【问题讨论】:
-
那么你是否使用了unittest?你的代码看起来不像。
-
我要做的就是使用 unittest 并找到一种方法来测试是否引发了异常。而已。如何检查是否引发了异常?
-
如果不是类,你想从 unittest 中使用什么? unittest 中的所有内容都是类。你只想导入 unittest 然后忘记它?
-
所以我不能在不使用类的情况下使用 unittest 吗?
标签: python unit-testing assert