python单元测试用例中self.assertRaises未涵盖的异常声明

Pra*_*mar 5 python unit-testing assertraises

这是我的功能:

def get_value(request, param):
  s = get_string(request, param)
  value = re.search('(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)', s)
  if not value:
    print 'match not found!'  
    raise Exception('incorrect format: %s' % param)
Run Code Online (Sandbox Code Playgroud)

测试功能:

def test_get_value(self):
    m = test_mocks.HttpRequestMock(REQUEST = {'start_date': '2011.07.31'})
    print '*************************'
    print 'date format changed'
    self.assertRaises(Exception, get_value, (m, 'start_date'))
    print '*********************
Run Code Online (Sandbox Code Playgroud)

get_value不打印:匹配未找到!

Don*_*kby 5

您错误地传递了参数assertRaises(),您应该像这样传递它们:

self.assertRaises(Exception, helpers.get_value, m, 'start_date')
Run Code Online (Sandbox Code Playgroud)

这是一个适合我的完整测试用例。第一个测试通过,第二个测试失败。

import re
from unittest import TestCase

def get_value(s):
    value = re.search('(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)', s)
    if not value:
        raise ValueError('incorrect format: %s' % s)

class TesterScratch(TestCase):
    # this one passes
    def test_get_value(self):
        s = '2011.07.31'
        self.assertRaises(ValueError, get_value, s)

    # this one fails, because the format is actually correct
    def test_get_value2(self):
        s = '2011-07-31'
        self.assertRaises(ValueError, get_value, s)
Run Code Online (Sandbox Code Playgroud)


小智 5

看来你的python版本有问题。我猜你使用的是2.6以下版本的python。尝试将函数参数作为函数的其他参数传递,即不要将它们放在元组中。尝试这个。

self.assertRaises(Exception, helpers.get_value, m, 'start_date')
Run Code Online (Sandbox Code Playgroud)