Skip to main content

A simple plugin to use with pytest

Project description

PyPI version Python versions See Build Status on Travis CI See Build Status on AppVeyor

A simple plugin to use with pytest


This pytest plugin was generated with Cookiecutter along with @hackebrot’s cookiecutter-pytest-plugin template.

Features

  • Readable diffs for failed tests
  • Customizable diffs for your classes

Requirements

  • pytest
  • deepdiff
  • pprintpp

Installation

You can install “pytest-diff” via pip from PyPI:

$ pip install pytest-diff

Usage

class Person:
    def __init__(self, name, age, favorites):
        self.name = name
        self.age = age
        self.favorites = favorites


def test_person():
    a = Person("Alice", age=21, favorites={"food": "spam", "movie": "Life of Brian"})
    b = Person("Alice", age=21, favorites={"food": "eggs", "movie": "Life of Brian"})
    assert a == b

Running pytest gives:

______________________________ test_person ______________________________

    def test_person():
        a = Person("Alice", age=21, favorites={'food': 'spam', 'movie': 'Life of Brian'})
        b = Person("Alice", age=21, favorites={'food': 'eggs', 'movie': 'Life of Brian'})
>       assert a == b
E       assert
E         <test_person.Person object at 0x7fa326d769e8>
E         ==
E         <test_person.Person object at 0x7fa326d76be0>
E         {'values_changed': {"root.favorites['food']": {'new_value': 'spam', 'old_value': 'eggs'}}}

examples/test_person.py:11: AssertionError

To customize diffs for a specific type, register it with the registry:

import pytest_diff


class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year


@pytest_diff.registry.register(Car)
def diff(x, y):
    return [
               f"{x.make} vs {y.make}",
               f"{x.model} vs {y.model}",
               f"{x.year} vs {y.year}",
           ]


def test_car():
    c1 = Car("Toyota", "Prius", 2010)
    c2 = Car("Honda", "Accord", 2009)
    assert c1 == c2

Then running pytest shows your custom diff:

    def test_car():
        c1 = Car("Toyota", "Prius", 2010)
        c2 = Car("Honda", "Accord", 2009)
>       assert c1 == c2
E       assert
E         <test_custom.Car object at 0x7f0e9b0ccd68>
E         ==
E         <test_custom.Car object at 0x7f0e9b0cceb8>
E         Toyota vs Honda
E         Prius vs Accord
E         2010 vs 2009

examples/test_custom.py:21: AssertionError

Contributing

Contributions are very welcome. Tests can be run with tox, please ensure the coverage at least stays the same before you submit a pull request.

License

Distributed under the terms of the MIT license, “pytest-diff” is free and open source software

Issues

If you encounter any problems, please file an issue along with a detailed description.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for pytest-diff, version 0.1.14
Filename, size File type Python version Upload date Hashes
Filename, size pytest_diff-0.1.14-py3-none-any.whl (4.8 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size pytest-diff-0.1.14.tar.gz (4.9 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page