如何在单元测试中保持相同的类实例

  • 本文关键字:实例 单元测试 python
  • 更新时间 :
  • 英文 :


我正在为我的类编写一些单元测试,我注意到类在每次测试时都会重置。

import unittest
from module import ClassA
class TestA(unittest.TestCase):
def setUp(self):
self.a = ClassA()
def firstTest(self):
# Test method and assign instance variables to self.a
def secondTest(self):
# Test method with assumption that self.a still have those variables
# Fails because instance variables are reset

unittest是否为每个单独的测试运行setUp()?如果是这样的话,我如何更新并为所有测试使用同一个类实例?

单元测试不一定要测试单个函数或方法;您可以使用多个单元测试来测试同一函数的不同方面。例如,像这样的函数

def some_func(x):
if x % 2 == 0:
return "even"
else:
return "odd"

应该至少有两个测试:一个检查它是否为偶数返回"even",另一个检查是否为奇数返回"odd"。如果%的参数不支持,第三个测试可能会检查它是否引发了适当的异常。

fixture是一个可以运行测试的环境,由TestCase表示。TestCase中定义的每个测试都使用相同的fixture,在运行每个测试之前都是全新创建的。

现在,在您的情况下,如果secondTest确实依赖于firstTest的结果,那么这意味着secondTest依赖于与firstTest不同的固定装置。这需要一个单独的TestCase,以确保为secondTest正确运行创建适当的条件。

例如,

# Tests that simply require an instance of ClassA
class TestA(unittest.TestCase):
def setUp(self):
self.a = ClassA()
def firstTest(self):
# Test method and assign instance variables to self.a

# Tests that require a particular configuration of an instance of ClassA
class TestB(unites.TestCase):
def setUp(self):
self.a = ClassA()
self.a.x = 6  # For example
def secondTest(self):
# Test something that requires self.a.x be set to 6 first

一个好的测试运行程序不会按顺序执行每个测试;它将随机化它们的顺序(而不考虑它们在测试夹具内的分组(,使得没有一个测试可以依赖于在另一个测试之前或之后执行。

欢迎来到测试世界!,这需要一段时间才能适应,但据我所知,它救了我几次,

这里有几个问题,(底部的最终答案(

  1. 默认情况下,测试方法需要以"Test_"为前缀,这可以更改,(请参阅此处的详细信息(

  2. 要回答您的问题,请使用前缀"setUpClass",

这里有一个例子!,

class TestA(unittest.TestCase):
def setUp(self):
self.a = OrderedDict()
print("function 'setUp' was called !")
@classmethod
def setUpClass(cls):
cls.b = OrderedDict()
print("function 'setUpClass' was called !")
def test_firstTest(self):
# Test method and assign instance variables to self.a
self.assertEqual(1, 1)
def test_secondTest(self):
# Test method with assumption that self.a still have those variables
# Fails because instance variables are reset
self.assertEqual(1, 1)

最新更新