相关疑难解决方法(0)

如何正确使用单元测试的assertRaises()与NoneType对象?

我做了一个简单的测试用例:

def setUp(self):

  self.testListNone = None

def testListSlicing(self):

  self.assertRaises(TypeError, self.testListNone[:1])
Run Code Online (Sandbox Code Playgroud)

我期待测试通过,但我得到例外:

Traceback (most recent call last):

    self.assertRaises(TypeError, self.testListNone[:1])

TypeError: 'NoneType' object is unsubscriptable
Run Code Online (Sandbox Code Playgroud)

我认为assertRaises会通过,因为会引发TypeError异常?

python unit-testing

154
推荐指数
4
解决办法
10万
查看次数

assertRaises在python单元测试中没有捕获异常

有人可以告诉我为什么下面的单元测试在test_bad中的ValueError上失败了,而不是用assertRaises捕获它并成功吗?我想我正在使用正确的过程和语法,但ValueError没有被捕获.

我在Linux机器上使用Python 2.7.5.

这是代码......

import unittest

class IsOne(object):
    def __init__(self):
        pass
    def is_one(self, i):
        if (i != 1):
            raise ValueError

class IsOne_test(unittest.TestCase):

    def setUp(self):
        self.isone = IsOne()

    def test_good(self):
        self.isone.is_one(1)
        self.assertTrue(True)

    def test_bad(self):
        self.assertRaises(ValueError, self.isone.is_one(2))

if __name__ == "__main__":
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

这是单元测试的输出:

======================================================================
ERROR: test_bad (__main__.IsOne_test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test/raises.py", line 20, in test_bad
    self.assertRaises(ValueError, self.isone.is_one(2))
  File "test/raises.py", line 8, in is_one
    raise ValueError
ValueError

----------------------------------------------------------------------
Ran 2 tests in 0.008s

FAILED (errors=1)
Run Code Online (Sandbox Code Playgroud)

python unit-testing assertraises

20
推荐指数
1
解决办法
2万
查看次数

单元测试导致sys.exit()

无论我做什么,sys.exit()都由unittest调用,即使是最琐碎的例子.我无法判断我的安装是否搞砸了或者发生了什么.

IDLE 1.2.2      ==== No Subprocess ====
>>> import unittest
>>> 
>>> class Test(unittest.TestCase):
        def testA(self):
            a = 1
            self.assertEqual(a,1)

>>> unittest.main()
option -n not recognized
Usage: idle.pyw [options] [test] [...]

Options:
  -h, --help       Show this message
  -v, --verbose    Verbose output
  -q, --quiet      Minimal output

 Examples:
   idle.pyw                               - run default set of tests
   idle.pyw MyTestSuite                   - run suite 'MyTestSuite'
   idle.pyw MyTestCase.testSomething      - run MyTestCase.testSomething
   idle.pyw MyTestCase                    - run all 'test*' test methods
                                           in MyTestCase

Traceback (most recent call last):
  File …
Run Code Online (Sandbox Code Playgroud)

python unit-testing

18
推荐指数
5
解决办法
7171
查看次数

测试是否引发了ValidationError

我想测试是否有异常,我该怎么办?

在我的models.py我有这个函数,我要测试的那个:

  def validate_percent(value):
    if not (value >= 0 and value <= 100):
      raise ValidationError('error')
Run Code Online (Sandbox Code Playgroud)

在我的tests.py中我试过这个:

def test_validate_percent(self):
    self.assertRaises(ValidationError, validate_percent(1000))
Run Code Online (Sandbox Code Playgroud)

测试的输出是:

..E
======================================================================
ERROR: test_validate_percent (tm.tests.models.helpers.HelpersTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/...py", line 21, in test_validate_percent
    self.assertRaises(ValidationError, validate_percent(1000))
  File "/....py", line 25, in validate_percent
    raise ValidationError(u'error' % value)
ValidationError: ['error']
Run Code Online (Sandbox Code Playgroud)

python django unit-testing

14
推荐指数
1
解决办法
7341
查看次数

在Python中测试 - 如何在使用unittest的测试中使用assertRaises?

我试图使用unittest在Python中进行一个简单的测试,看看如果一个类在构造函数中获得不合适的输入时是否抛出异常.这个类看起来像这样:

class SummaryFormula:
    def __init__( self, summaryFormula):
        self.atoms = {}
        for atom in re.finditer( "([A-Z][a-z]{0,2})(\d*)", summaryFormula):
            symbol = atom.group(1)
            count = atom.group(2)

            if pocet != "":
                self.atoms[ symbol] = int(count)
            else:
                self.atoms[ symbol] = 1
Run Code Online (Sandbox Code Playgroud)

我的测试如下:

    class ConstructorTestCase(unittest.TestCase):
      def testEmptyString(self):
        self.assertRaises(TypeError, ukol1.SummaryFormula(), "testtest")

    if __name__ == '__main__':
      unittest.main()
Run Code Online (Sandbox Code Playgroud)

我想要的只是测试失败,这意味着不处理构造函数的不合适输入的异常.

相反,我得到一个错误:__init__() takes exactly 2 arguments (1 given).

我错过了什么?我应该指定的第二个参数是什么?

另外,我应该使用什么类型的错误来处理异常,即我的regexp无法匹配的输入被传递给构造函数?

托马斯,谢谢你

python testing unit-testing exception-handling

12
推荐指数
4
解决办法
2万
查看次数

测试抛出IntegrityError的SQLAlchemy代码的正确方法是什么?

我已经阅读了这个问答,并且已经尝试在我的代码上捕获异常,这会引发IntegrityError异常,这样:

self.assertRaises(IntegrityError, db.session.commit())
Run Code Online (Sandbox Code Playgroud)

但不知何故,我的单元测试仍然失败并因IntegrityError异常而停止.我希望它说好,因为我已经预计在我的单元测试中会有异常.这是由于代码尝试插入具有相同唯一字段值的行.

任何的想法?

python sqlalchemy

5
推荐指数
1
解决办法
894
查看次数

在Python3中,如何在单元测试中测试异常处理?

我正在为 api 进行几个单元测试。测试使用 @patch 来模拟 api 调用。我希望创建的一些测试应该会触发异常。我如何在单元测试中处理这个问题?

这是我到目前为止所拥有的。Pylint 抱怨 assertTrue() 语句。我确信有更好的方法来处理异常。

@patch('myapi.myapi.requests.request')
def test_auth_failure(self, mock_request):
    # Configure the request mock to return an auth failure
    # Auth/login (/session) failures return status 200, but without a token!
    mock_request.return_value.status_code = 200
    mock_request.return_value.content = json.dumps(self.mock_auth_failure)
    try:
        # Call auth()
        self.api.auth()
        # Exception should have been raised
        self.assertTrue(False)
    except exceptions.HTTPUnauthorized:
        # Exception caught
        self.assertTrue(True)
Run Code Online (Sandbox Code Playgroud)

附加信息:这是从unittest.TestCase 扩展的类中。例子:

 class MyApiTests(unittest.TestCase):
Run Code Online (Sandbox Code Playgroud)

python python-3.x

3
推荐指数
1
解决办法
1万
查看次数

当测试没有抛出预期的异常时,如何显示错误消息?

我是python的新手。我想测试我的代码是否抛出异常。我从这里得到了代码:你如何测试 Python 函数抛出异常?

import mymod
import unittest

class MyTestCase(unittest.TestCase):
    def test1(self):
        self.assertRaises(SomeCoolException, mymod.myfunc, compulsory_argument)
Run Code Online (Sandbox Code Playgroud)

现在,如果没有抛出异常,我还想显示一条消息。我怎么做 ?python 文档没有明确提到它。我在“compulsory_argument”之后添加了消息,但失败了。

编辑:我尝试了第一个修改后的答案并得到了一个例外。我的错误是什么?

import unittest

def sayHelloTo(name):
    print("Hello " + name)

class MyTestCase(unittest.TestCase):
    def test1(self):
        person = "John"
        with self.assertRaises(Exception, "My insightful message"):
            sayHelloTo(person)
Run Code Online (Sandbox Code Playgroud)

错误:

Error
Traceback (most recent call last):
  File "C:\tests\tester.py", line 9, in test1
    with self.assertRaises(Exception, "My insightful message"):
AttributeError: __exit__
Run Code Online (Sandbox Code Playgroud)

python unit-testing exception

0
推荐指数
1
解决办法
1994
查看次数