我正在用 Django 做一些单元测试。 TestCase类和这个类中的实际方法有什么关系?组织这些内容的最佳做法是什么?
比如我有
class Test(TestCase):
def __init__(self):
...
def testTestA(self):
#test code
def testTestB(self):
#test code
如果我这样组织:
class Test1(TestCase):
def __init__(self):
...
def testTestA(self):
#test code
class Test2(TestCase):
def __init__(self):
...
def testTestB(self):
...
哪个更好,有什么区别?
谢谢!
最佳答案
您很少为
TestCase
编写__init__
。因此,请从您的单元测试心智模型中剔除这一点。您有时会编写
setUp
和tearDown
。然而,Django 自动执行了其中的大部分操作,您通常只提供一个用于填充测试数据库的静态fixtures=
变量。
从根本上讲,什么是测试用例?
测试用例是一个“夹具”——被测单元的配置——然后您可以对其进行练习。理想情况下,每个 TestCase 都有一个 setUp
方法来创建一个夹具。每个方法都将对该夹具执行操作并断言该操作有效。
但是。对此没有任何教条。
在许多情况下——尤其是在使用 Django 模型时——并没有那么多有趣的操作。
如果您不在模型中覆盖save
,您实际上不需要进行CRUD 测试。您可以(并且应该)信任 ORM。 [如果您不信任它,那么获取一个您确实信任的新框架。]
如果模型类中有几个属性,您可能不想创建不同的方法来测试每个属性。您可能希望在单个 TestCase 的单个方法中按顺序简单地测试它们。
如果,OTOH,你有很多状态变化的非常复杂的类,你将需要一个不同的测试用例来配置一个对象是一个状态,将它操纵到另一个状态并断言所有变化都正确运行。
View Functions,因为它们在技术上不是有状态的,所以不完全符合单元测试的理念。当执行 setUp
以创建处于已知状态的单元时,您正在使用客户端界面逐步完成一些交互以创建处于已知状态的 session 。一旦 session 达到所需状态,您的各种测试方法就会执行该 session ,并断言一切正常。
总结
将 TestCase 视为将在其中运行测试的“设置”或“上下文”。
将每个方法视为“when_X_should_Y”语句。有些人建议使用那种名称(“test_when_x_should_y”),因此该方法将执行“X”并断言“Y”是响应。
关于python - Django 中的单元测试。 TestCase类和方法之间的关系是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2580519/