Python assertRaises未捕获异常

Python assertRaises未捕获异常,python,unit-testing,Python,Unit Testing,我有一个单元测试,用于检查构造函数中的异常: import unittest from jaboci import Jacobi class TestJacobi(unittest.TestCase): def test_even(self): a = 11 n = 12 Jacobi(a, n) self.assertRaises(ValueError, Jacobi, a, n) if __name__ == '_

我有一个单元测试,用于检查构造函数中的异常:

import unittest
from jaboci import Jacobi

class TestJacobi(unittest.TestCase):

    def test_even(self):
        a = 11
        n = 12
        Jacobi(a, n)
        self.assertRaises(ValueError, Jacobi, a, n)

if __name__ == '__main__':
    unittest.main()
被测类别:

class Jacobi:

    def __init__(self, a, n):
        self.a = a
        self.n = n
        if n % 2 == 0:
            raise ValueError("N must be odd.")
当我使用
-m unittest discover
运行unittest时,测试失败:

E
======================================================================
ERROR: test_even (test_jacobi.TestJacobi)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/prasopes/prg/python/PycharmProjects/jacobi_symbol/test_jacobi.py", line 9, in test_even
    Jacobi(a, n)
  File "/home/prasopes/prg/python/PycharmProjects/jacobi_symbol/jaboci.py", line 7, in __init__
    raise ValueError("N must be odd.")
ValueError: N must be odd.

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (errors=1)

在self.assertRaises(ValueError,Jacobi,a,n)之前调用
Jacobi(a,n)
。您得到的异常来自第一次调用,因此测试立即失败。它永远不会到达您在
self.assertRaises(ValueError,Jacobi,a,n)
之前调用
Jacobi(a,n)
assertRaises行。您得到的异常来自第一次调用,因此测试立即失败。它永远不会到达
assertRaises

[因为我没有足够的代表对@mata answer发表评论…]

说清楚一点,你要么

  • 删除雅可比(a,n)
[由@mata暗示]
  • 或者,调用“雅各比(n,a)”[如@abarnert comment对@mata的假设]

    • [因为我没有足够的代表对@mata answer发表评论…]

      说清楚一点,你要么

      • 删除雅可比(a,n)[由@mata暗示]
      • 或者,调用“雅各比(n,a)”[如@abarnert comment对@mata的假设]

      +1。我怀疑OP实际上想执行
      Jacobi(n,a)
      (成功),然后
      assertrises(ValueError,Jacobi,a,n)
      (按预期失败)。如果你这样做,测试就通过了。我怀疑OP实际上想执行
      Jacobi(n,a)
      (成功),然后
      assertrises(ValueError,Jacobi,a,n)
      (按预期失败)。如果您这样做,测试就通过了。您是想
      导入jaboci
      而不是
      导入jacobi
      ?@abarnert文件名有误,谢谢您指出这一点。我在IDE中使用了自动完成功能,所以我没有注意到。你是想
      导入jaboci
      而不是
      导入jacobi
      ?@abarnert这是文件名中的一个输入错误,谢谢你指出这一点。我在IDE中使用了自动完成,所以我没有注意到这一点。