我有一个像这样的测试用例:
class TokenGeneratorTestCase(unittest.TestCase):
def test_genToken(self):
"""
Test if genToken returns a UUID, if not, then -1
"""
tg = TokenGenerator()
result = tg.genToken()
self.assertIn(type(result), [ uuid.UUID, int ])
if type(result) == int:
self.assertEqual(result, -1)
我想测试genToken()是否返回uuid.UUID或-1。是否可以使用单个断言*?
PS:我是Python和单元测试的新手,所以原谅我的无知:)
答案 0 :(得分:3)
当你正在做两个断言时没有错(假设你抓住AssertionError
:))。如果你想要,你可以将它们组合起来:
# You can also use type(result) == uuid.UUID or result == -1
correctness = isinstance(result, uuid.UUID) or (isinstance(result, int) and result == -1)
self.assertTrue(correctness)
答案 1 :(得分:2)
这里有问题 - 因为您无法确定TokenGenerator
是否正常运行。它总是可以返回-1
,你会很高兴测试正在通过。您需要在此处创建两个测试 - 一个用于验证生成器返回-1
,另一个用于验证生成器返回uuid.UUID
。这些测试应该是可重复的,而不是随机的。你怎么能这样做?您应该能够通过测试影响令牌生成器中的someCondition
。即您应该在调用genToken()
之前将一些依赖项传递给生成器,或者设置适当的生成器状态。