【问题标题】:Running the same test on different model objects在不同的模型对象上运行相同的测试
【发布时间】:2022-12-12 23:29:58
【问题描述】:

当我调用端点时,我的数据库中有三种情况应该会给出相同的结果:

Model1.objects.create(name="a")
assert requests.delete("endpoint?pk=a").response == 204

Model2.objects.create(name="a")
assert requests.delete("endpoint?pk=a").response == 204

Model1.objects.create(name="a")
Model2.objects.create(name="a")
assert requests.delete("endpoint?pk=a").response == 204

所以基本上测试的 setup() 部分是不同的,我在其中创建模型对象,但是测试本身在每种情况下都是相同的。实现这个的最佳方法是什么?我可以只创建一个实现 assert requests.delete("endpoint?pk=a").response == 204 的 Base TestCase 类,然后从它继承三次,在三个类中的每一个的 setUpTestData() 中创建模型吗?

【问题讨论】:

    标签: python pytest django-testing


    【解决方案1】:

    这听起来像是参数化测试的用例。基本思想是您有一组要对某些项目或对象做出的断言。您编写一次测试,然后让参数化测试逻辑为每个项目运行测试。

    要用伪代码给出基本草图,您可以这样做:

    @parameterized.parameters(['a', 'b', 'c'])
    def test_example(test_letter):
        self.assertLen(test_letter, 1)
        self.assertIn(test_letter, {'a', 'b', 'c'})
    

    您可以在这个基本草图中看到参数化装饰器中的每个参数都被传递到测试中。

    您可能会将您的对象作为参数来代替并共享核心测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      • 2021-04-20
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      相关资源
      最近更新 更多