我对 django 和单元测试都是新手,我正在尝试为我的模型构建单元测试,但遇到了一些困难。
我有几个模型紧密合作:
Resource
这将维护一个文件资源
MetadataField
代表一个可以添加到资源中的元数据字段,对应一个满是字段的表
MetadataValue
将 MetadataField IDs 与 Resource IDs 和相应的值匹配,这是 Resource - MetadataField 多对多关系的中间表
MetadataSchema
表示由许多MetadataFields
. 每个都Resource
被分配了一个MetadataSchema
控制MetadataFields
它的代表
关系:
Resource - MetadataField : Many-to-Many through MetadataValue
MetadataValue - MetadataSchema : Many-to-Many
Resource - MetadataSchema : One-to-Many
我不确定如何编写测试来处理这些模型。Test Driven Django教程中的模型测试似乎主要包括初始化对象和验证属性。如果我对这些对象进行任何设置,尽管它需要使用所有其他对象,那么测试将全部依赖于它们不打算测试的代码。例如,如果我想创建一个资源,我还应该为它分配一个元数据模式和该模式中字段的值。
我在 django 中四处寻找单元测试模型的好例子,但找不到任何东西(django 网站似乎没有单元测试,这些项目要么测试不佳/缺少测试,要么在几个案例中有很好的测试,但几乎没有使用模型。
以下是我看到的可能方法:
- 做了很多模拟,以确保我只测试一个类,并保持模型上的单元测试非常简单,只测试它们的方法/属性,而不是关系是否正常运行。然后依靠更高级别的集成测试来找出关系等中的任何问题。
- 设计确实依赖于其他功能的单元测试,并接受一个功能的中断会破坏多个测试,前提是仍然很容易看到故障发生在哪里。所以我可能会有一种方法来测试我是否可以成功地将 a 添加
MetadataValue
到资源中,这需要设置至少一个MetadataSchema
andResource
。然后我可以使用一个try - except
块来确保如果测试在处理我实际要测试的断言之前失败,它会给出一个特定的错误消息,表明故障存在于其他地方。这样我可以快速扫描多个失败的测试消息以找到真正的罪魁祸首。但是,不可能在每次测试中都可靠地进行这种分离
我很难理解这一点,所以我不知道这一切是否有意义,但如果有针对这种情况的最佳做法,请指出我!谢谢