Skip to content

pytest approx wrong formatting return - printing all values as wrong. #12444

@natsala13

Description

@natsala13

Hey! Thanks for this great library!
I am using pytest.approx to compare between 2 dicts (which are not in the same order), whenever the 2 dicts are equal the asserts passes. but if only 1 element is wrong the assert fails (as expected) but the output message shows as if all values were different instead of printing only the wrong one.

pytest == 8.2.0
python == 3.11.7
Ubuntu == 20.04

def test_approx_dict_equal():  # This tests passes!
    assert {'a': 1, 'c': 3} == pytest.approx({'a': 1, 'c': 3})


def test_approx_dict_ordered():  # This tests fails as expected and return CORRECT output
    assert {'a': 1, 'c': 5} == pytest.approx({'a': 1, 'c': 3})


def test_approx_dict_unordered():  # This tests fails as expected and return WRONG output
    assert {'c': 5, 'a': 1} == pytest.approx({'a': 1, 'c': 3})

and the output I get from the two failing tests is:

================================================= short test summary info ==================================================
FAILED tests/test_debug_pytest.py::test_approx_dict_ordered - AssertionError: assert {'a': 1, 'c': 5} == approx({'a': 1 ± 1.0e-06, 'c': 3 ± 3.0e-06})

  comparison failed. Mismatched elements: 1 / 2:
  Max absolute difference: 2
  Max relative difference: 0.6666666666666666
  Index | Obtained | Expected
  c     | 5        | 3 ± 3.0e-06
FAILED tests/test_debug_pytest.py::test_approx_dict_unordered - AssertionError: assert {'c': 5, 'a': 1} == approx({'a': 1 ± 1.0e-06, 'c': 3 ± 3.0e-06})

  comparison failed. Mismatched elements: 2 / 2:
  Max absolute difference: 4
  Max relative difference: 4.0
  Index | Obtained | Expected
  a     | 1        | 1 ± 1.0e-06
  c     | 5        | 3 ± 3.0e-06
======================================== 2 failed, 1 passed, 4 deselected in 0.37s =========================================

Metadata

Metadata

Assignees

No one assigned

    Labels

    topic: rewriterelated to the assertion rewrite mechanismtype: bugproblem that needs to be addressed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions