python - Django 中的单元测试。 TestCase类和方法之间的关系是什么

标签 python django unit-testing

我正在用 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):
        ...

哪个更好,有什么区别?

谢谢!

最佳答案

  1. 您很少为 TestCase 编写 __init__。因此,请从您的单元测试心智模型中剔除这一点。

  2. 您有时会编写setUptearDown。然而,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/

相关文章:

PHPUnit 和抽象类 : how to test concrete constructor that accepts parameters and other concrete methods

python - 正则表达式/正则表达式 Python 2.7

python - 使用 mplfinance/matplotlib 时可能出现内存泄漏。如何解决?

django - 上下文处理器无法与 Django 中的 Jinja2 一起使用

javascript - 防止以编程方式调用 django-rest-framework API

unit-testing - 如何在TFS 2015 Web中运行自动化测试用例?

unit-testing - ABAP 单元测试类 - 很好的引用

python - 找到最长重复的长度?

python - 有什么方法可以返回我猜对的数字并在其后添加文本?

python - get() 接受 2 到 3 个位置参数,但给出了 4 个。为什么会出现这个错误?解决这个问题的办法是什么?