-1

我正在尝试运行以下测试

 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 不会失败,有什么想法吗?

4

1 回答 1

1

我是否正确理解您,因为您在问为什么 testBasic_helper 方法在测试运行时不会引发异常?我不明白为什么会这样,is_prime 应该返回一个 bool 值,测试会根据该值检查是否失败。如果测试失败,它只会失败,您的代码和 unittest 框架都不会引发异常。

PS "unit_test.testBasic" 已经是可调用的,"lambda: unit_test.testBasic()" 是多余的,所以你可以写 self.assertRaises(Exception, unit_test.testBasic)。

于 2010-05-25T11:44:48.667 回答