您的位置:首页 > 编程语言 > Python开发

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

2018-02-22 22:04 627 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: