2016-03-22 126 views
-1

所以我想导入一个模块,并从该模块中的类中测试方法。如何断言与Python单元测试不会引发错误

这里是一个方法的例子。

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

但似乎这样的失败摆在首位使用单元测试的目的是什么?我认为,如果发生异常,它会返回一个T/F,我可以随心所欲地执行任何操作。

希望是足够的信息。

基于许多给出的答案,我假设没有什么内置在单元测试,我可以做assertRaise(我相信这是在Django使用)

+0

那么你是否使用unittest?你的代码看起来不像你。 – Goyo

+0

[如何声明一个函数调用不会返回unittest错误?](http://stackoverflow.com/questions/36142282/how-to-assert-that-a-function-call-does- not-return-an-error-with-unittest) – Goyo

+0

我想要做的就是使用unittest并找到一种方法来测试是否引发异常。而已。如何检查是否引发异常? – david

回答

4

断言的是,测试的代码不会引发异常免费提供,您无需为此编写代码。

+0

如果我有5个函数类似于运行测试的production_warning,并且我想要在一个遍中运行全部5个函数,则异常将导致整个事情停止。 – david

+0

任何失败的断言都会导致整个事情停止。所以你不想断言? – Goyo

+0

ohhhh,我想不是。我不想让它停下来。 – david