Python中assertRaises函数的一个问题
我正在尝试运行以下测试Python中assertRaises函数的一个问题,python,assertraises,Python,Assertraises,我正在尝试运行以下测试 self.assertRaises(Exception,lambda: unit_test.testBasic()) 在哪里 是 其中素数是一个函数,并且 但是在 self.assertRaises(Exception,lambda: unit_test.testBasic()) lambda函数在 测试 def testBasic_helper(self): self.failIf(is_prime(2)) self.assertTrue(is_p
self.assertRaises(Exception,lambda:
unit_test.testBasic())
在哪里
是
其中素数是一个函数,并且
但是在
self.assertRaises(Exception,lambda:
unit_test.testBasic())
lambda函数在
测试
def testBasic_helper(self):
self.failIf(is_prime(2))
self.assertTrue(is_prime(1))
失败
有人能提出解决这个问题的办法吗
我将再次尝试解释我的问题,因为在我的第一篇文章中,我没有很好地解释它 这就是来源 is_prime(x)只是一个检查素数的函数 def是_素数(数字): PRIME,NOT_PRIME=NOT is_PRIME.break,is_PRIME.break 如果数字==2: 返回素数
if not isinstance(number, int) and not isinstance(number, float):
raise Exception
if number % 2 == 0 or number < 2 or isinstance(number, float):
return NOT_PRIME
max = int(number**0.5) + 1
for i in range(3, max, 2):
if number % i == 0:
return NOT_PRIME
return PRIME
这里是测试,我们可以说,测试测试程序是一个测试-一个测试超过一个测试
类元编程测试(unittest.TestCase):
def测试_装饰器(自身):
来自p10输入单元\u转换器
def celsius_function(val):
return val
self.assertTrue(hasattr(unit_converter(1,2),'__call__'))
decorated = unit_converter(1.8, 32)(celsius_function)
self.assertTrue(hasattr(decorated, '__call__'))
self.assertAlmostEquals(64.4, decorated(val = 18.0))
def test_unit_test(self):
import p10
from p10sample import is_prime as is_prime_actual
unit_test = p10.IsPrimeTest('testBasic')
unit_test.setUp()
is_prime_actual.broken = False
self.assertEquals(None, unit_test.testBasic())
self.assertEquals(None, unit_test.testNegative())
self.assertEquals(None, unit_test.testNonNumber())
self.assertEquals(None, unit_test.testRandom())
is_prime_actual.broken = True
self.assertRaises(Exception,lambda: unit_test.testBasic())
self.assertRaises(Exception, lambda: unit_test.testNegative())
self.assertRaises(Exception, lambda: unit_test.testRandom())
unit_test.tearDown()
一、 无法更改第二次测试-测试结束
因此表达式self.assertRaises(异常,lambda:unit_test.testBasic())
必须保持不被冻结
我的问题是,当testBasic()函数失败时,例如
self.assertFailIf(is_prime(2)),self.assertFailIf引发异常,unit_test.testBasic()
向上层作用域抛出相同的异常,但lambda:unit_test.testBasic()不会抛出异常并
支票
assertRaises(异常,lambda:unit\u test.testBasic())
失败
我的问题是如何使testBasic()函数使lambda:unit\u test.testBasic()能够完成exceotion并且selfassertRaises不会失败,有什么想法吗?我是否正确理解您的意思,因为您在问为什么testBasic\u helper方法在测试运行时不会引发异常? 我不明白为什么会这样,is_prime应该返回一个bool值,测试将根据该值检查失败。如果测试失败,那么它就是失败了,您的代码和unittest框架都不会抛出异常
另外,“unit\u test.testBasic”已经是可调用的,而“lambda:unit\u test.testBasic()”是多余的,因此您可以只编写self.assertRaises(例外,unit\u test.testBasic)。代码的格式仅由四行空格组成,而不是附加一个
。这是一句引语,“多余”是什么意思?这是一个拼写错误,正确拼写为“多余”,意思是不需要。
if not isinstance(number, int) and not isinstance(number, float):
raise Exception
if number % 2 == 0 or number < 2 or isinstance(number, float):
return NOT_PRIME
max = int(number**0.5) + 1
for i in range(3, max, 2):
if number % i == 0:
return NOT_PRIME
return PRIME
def testBasic_helper(self):
self.failIf(is_prime(1))
self.assertTrue(is_prime(2))
self.failIf(is_prime(4))
self.failIf(is_prime(6))
self.assertTrue(is_prime(7))
def testBasic(self):
return self.testBasic_helper()
def testNegative(self):
self.failIf(is_prime(-2))
self.failIf(is_prime(-11 ** 3))
def testNonNumber(self):
self.assertRaises(Exception,is_prime,'asd')
self.assertRaises(Exception,is_prime,self.__class__.__name__)
def testRandom(self):
for i in range(0,10000):
rand = randint(-10000,10000)
self.assertEquals(prime(rand),is_prime(rand))
def celsius_function(val):
return val
self.assertTrue(hasattr(unit_converter(1,2),'__call__'))
decorated = unit_converter(1.8, 32)(celsius_function)
self.assertTrue(hasattr(decorated, '__call__'))
self.assertAlmostEquals(64.4, decorated(val = 18.0))
def test_unit_test(self):
import p10
from p10sample import is_prime as is_prime_actual
unit_test = p10.IsPrimeTest('testBasic')
unit_test.setUp()
is_prime_actual.broken = False
self.assertEquals(None, unit_test.testBasic())
self.assertEquals(None, unit_test.testNegative())
self.assertEquals(None, unit_test.testNonNumber())
self.assertEquals(None, unit_test.testRandom())
is_prime_actual.broken = True
self.assertRaises(Exception,lambda: unit_test.testBasic())
self.assertRaises(Exception, lambda: unit_test.testNegative())
self.assertRaises(Exception, lambda: unit_test.testRandom())
unit_test.tearDown()