Skip to main content
 首页 » 编程设计

python之如何使用 pytest fixtures 和 django 在 unittest 中创建类似于 "setUp"的方法

2024年08月12日48zengkefu

我的测试文件中有以下代码并试图重构它。我是 pytest 的新手,我正在尝试实现 unittest 可用的类似方法 setUp,以便能够将数据库中创建的对象检索到其他函数,而不是重复代码。

在这种情况下,我想将 test_setup 中的 month 重新用于其他函数。

测试模型.py

@pytest.mark.django_db 
class TestMonth: 
    # def test_setup(self): 
    #     month = Month.objects.create(name="january", slug="january") 
    #     month.save() 
 
    def test_month_model_save(self): 
        month = Month.objects.create(name="january", slug="january") 
        month.save() 
        assert month.name == "january" 
        assert month.name == month.slug 
 
    def test_month_get_absolute_url(self, client): 
        month = Month.objects.create(name="january", slug="january") 
        month.save() 
        response = client.get(reverse('core:month_detail', kwargs={'slug': month.slug})) 
        assert response.status_code == 200 
 

我将不胜感激。

请您参考如下方法:

pytest 等价物是这样的,使用固定装置:

import pytest 
 
@pytest.fixture 
def month(self): 
    obj = Month.objects.create(name="january", slug="january") 
    obj.save() 
    # everything before the "yield" is like setUp 
    yield obj 
    # everything after the "yield" is like tearDown 
 
def test_month_model_save(month): 
    assert month.name == "january" 
    assert month.name == month.slug 
 
def test_month_get_absolute_url(month, client): 
    response = client.get(reverse('core:month_detail', kwargs={'slug': month.slug})) 
    assert response.status_code == 200