zl程序教程

您现在的位置是:首页 >  后端

当前栏目

[Python Test] Use pytest fixtures to reduce duplicated code across unit tests

Pythonpytestcode to use test unit reduce
2023-09-14 09:00:50 时间

In this lesson, you will learn how to implement pytest fixtures. Many unit tests have the same resource requirements. For example, an instantiated object from a class. You will learn how to create the instance of the class one time as a fixture and reuse that object across all your tests. This results in faster tests, eliminates duplicate code, and uses less resources when running your tests.

 

"""
Python class for a self-driving car.
Suitable for disrupting automotive industry
"""

class Car(object):

    def __init__(self, speed, state):
        self.speed = speed
        self.state = state

    def start(self):
        self.state = "running"
        return self.state

    def turn_off(self):
        self.state = "off"
        return self.state

    def accelerate(self):
        self.speed += 10
        return self.speed

    def stop(self):
        self.speed = 0
        return self.speed

 

test:

"""
Tests for Car class
"""

import pytest
from car import Car

class TestCar(object):

    """
    default scope is "function" which means
    foreach test, it will have its own scope
    "module" ref to class itself, so it sharing
    the same instance
    """

    @pytest.fixture(scope="module")
    def my_car(self):
        return Car(0, "off")

    def test_start(self, my_car):
        my_car.start()
        assert my_car.state == "running"

    def test_turn_off(self, my_car):
        my_car.turn_off()
        assert my_car.state == "off"

    def test_accelerate(self, my_car):
        my_car.accelerate()
        assert my_car.speed == 10

    """
    This one will failed because we are using fixture
    scope as "module", my_car.speed == 20
    """
    def test_accelerate1(self, my_car):
        my_car.accelerate()
        assert my_car.speed == 10

    def test_stop(self, my_car):
        my_car.stop()
        assert my_car.speed == 0