Skip to main content

A pytest approxable dict mixin for data class

Project description

Pytest Approxable Mixin


Example

from pytest_approxable import Approxable
from dataclasses import dataclass
from pytest import approx

@dataclass
class MetalProperties(Approxable):
    name: str
    heat_capacity: float
    conductivity: float

def test_metal_equal():
    mp1 = MetalProperties(name='metal1', heat_capacity=0.5, conductivity=1.)
    mp2 = MetalProperties(name='metal2', heat_capacity=0.499999999, conductivity=0.9999999998)
    assert approx(mp1.approxable_dict, abs=0.1) == mp2.approxable_dict

Problem

When testing codes, we usually approximate floating numbers to avoid decimal points error. To do so, we use pytest.approx as follow

from pytest import approx
def test_approx():
    a = 1.0000000000000001
    b = 1.
    assert approx(a, abs=0.1) == b # this will pass
    assert a == b # this will fail

Moreover, we can also use this with the dictionary derived from a dataclass. For example,

from dataclasses import dataclass, asdict
from pytest import approx

@dataclass
class MetalProperties:
    heat_capacity: float
    conductivity: float

def test_metal_equal():
    mp1 = MetalProperties(heat_capacity=0.5, conductivity=1.)
    mp2 = MetalProperties(heat_capacity=0.499999999, conductivity=0.9999999998)
    assert approx(asdict(mp1), abs=0.1) == asdict(mp2)

Now the problem arises when we have non-number fields in the class

@dataclass
class MetalProperties:
    name: str
    heat_capacity: float
    conductivity: float

def test_metal_equal():
    mp1 = MetalProperties(name='metal1', heat_capacity=0.5, conductivity=1.)
    mp2 = MetalProperties(name='metal2', heat_capacity=0.499999999, conductivity=0.9999999998)
    assert approx(asdict(mp1), abs=0.1) == asdict(mp2)

Above code will fails since attribute name can't be approximated

##Progress

  • tests
  • supports nested object

Project details


Download files

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

Source Distribution

hackinteach-pytest-approxable-0.0.3.tar.gz (1.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file hackinteach-pytest-approxable-0.0.3.tar.gz.

File metadata

  • Download URL: hackinteach-pytest-approxable-0.0.3.tar.gz
  • Upload date:
  • Size: 1.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.3

File hashes

Hashes for hackinteach-pytest-approxable-0.0.3.tar.gz
Algorithm Hash digest
SHA256 f5ff70b38727c712d76971b7292449450c6c710af2e9fb44a57ff5245f0ab5b5
MD5 fa69abf04884eb73604859a4b36b6b31
BLAKE2b-256 8034a8edf01a55cac03c9a2e6678274834ad3610d115347773301d55239cdc53

See more details on using hashes here.

File details

Details for the file hackinteach_pytest_approxable-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: hackinteach_pytest_approxable-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 6.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.7.3

File hashes

Hashes for hackinteach_pytest_approxable-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 7b64193c048c5221f9e285c5c0f2c334133c7586dc2e9a09f1ba085c4b7ebde2
MD5 7062de4aec8279fb108beea52e294e8a
BLAKE2b-256 af85faca579be3945acef86d254f1b2feccb3f59c8b21a80ef1874d6e045cf54

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page