【问题标题】:How to assert that an error is not raised with python unittest如何断言没有使用 python unittest 引发错误
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 如果我有 5 个类似于 production_warning 的函数来运行测试,并且我想一次性运行所有 5 个,一个异常会导致整个事情停止。
  • 任何失败的断言都会导致整个事情停止。所以你毕竟不想断言?
  • 哦,我猜不是。我不想让它停下来。
  • 任何失败的断言都会导致整个事情停止,除非你将它包装在一个 try - except 子句中。
  • @Alex Python 测试失败的标准方法是引发异常。这就是测试运行者知道测试失败的方式。当然,您可以在不引发故障的情况下实现一些故障概念,然后编写一个可以检测此类故障的自定义测试运行程序。但我认为这不是这里要问的。
猜你喜欢
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 2011-05-12
  • 1970-01-01
  • 2011-03-28
  • 2013-09-16
相关资源
最近更新 更多