我正在尝试运行以下测试
self.assertRaises(Exception,lambda:
unit_test.testBasic())
在哪里
test.testBasic()
是
class IsPrimeTest(unittest.TestCase):
def assertRaises(self,exception,callable,*args,**kwargs):
print('dfdf')
temp = callable
super().assertRaises(exception,temp,*args,**kwargs)
def testBasic_helper(self):
self.failIf(is_prime(2))
self.assertTrue(is_prime(1))
其中素数是一个函数,并且
但在
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 is_prime(number): PRIME, NOT_PRIME = not is_prime.broken, is_prime.broken if number == 2: 返回 PRIME
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
is_prime.broken = False
类 IsPrimeTest(unittest.TestCase):
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))
这里是测试,我们可以说测试测试程序是一个测试 - 一个测试超过测试
类 MetaProgrammingTest(unittest.TestCase): def test_decorator(self): from p10 import unit_converter
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(Exception,lambda: unit_test.testBasic()) 必须保持不变我的问题是当 testBasic() 函数失败时,例如,如果我们有self.assertFailIf(is_prime(2)) ,self.assertfailIf 抛出异常,unit_test.testBasic() 抛出同样的异常到上层作用域,但是 lambda:unit_test.testBasic() 不抛出异常并且检查 self.assertRaises(异常,lambda: unit_test.testBasic()) 失败我的问题是如何制作 testBasic() 函数,以便 lambda: unit_test.testBasic() 将跳过 exceotion 并且 selfassertRaises 不会失败,有什么想法吗?