简体   繁体   中英

Pytest `pytest.raises(ValueError)` does not seem to detect a `ValueError`

EDIT. The issue was that everytime I would import the function, it would not changed with updates. For this I needed to do

import sys, importlib
importlib.reload(sys.modules['foo'])
from foo import bar

And it started working


I am trying to write a test using Pytest to detect a ValueError if a json file passed into a function is invalid. However, when I follow the example, the test doesn't detect that the ValueError was raised.

This is the function I want to test

import pytest
import json 

def read_file(input_file):
    try: 
        with open(input_file, "r", encoding='utf-8') as reader:
            pre_input_data = json.load(reader)
    except ValueError: 
        raise ValueError

And this is my test function

def test_read_file():
    with pytest.raises(ValueError):
        read_file("invalidJsonFile.json")

If I just run the original function, it raises the ValueError

read_file("invalidJsonFile.json")

Invalid json file: Expecting value: line 1 column 1 (char 0)

However, when I run the test, it says it did not get a ValueError

test_read_file()

Invalid json file: Expecting value: line 1 column 1 (char 0)
---------------------------------------------------------------------------
Failed                                    Traceback (most recent call last)
<ipython-input-47-c42b81670a67> in <module>()
----> 1 test_read_file()

2 frames
<ipython-input-46-178e6c645f01> in test_read_file()
      1 def test_read_file():
      2     with pytest.raises(Exception):
----> 3         read_file("invalidJsonFile.json")

/usr/local/lib/python3.6/dist-packages/_pytest/python_api.py in __exit__(self, *tp)
    727         __tracebackhide__ = True
    728         if tp[0] is None:
--> 729             fail(self.message)
    730         self.excinfo.__init__(tp)
    731         suppress_exception = issubclass(self.excinfo.type, self.expected_exception)

/usr/local/lib/python3.6/dist-packages/_pytest/outcomes.py in fail(msg, pytrace)
    115     """
    116     __tracebackhide__ = True
--> 117     raise Failed(msg=msg, pytrace=pytrace)
    118 
    119 

Failed: DID NOT RAISE <class 'Exception'>

Are you sure you're running the same code you sent here? because in a stack trace it looks like you're reading a different file (which could be valid and then no exception will be raised, if it's empty for example).

----> 3 read_file("sampleData.csv")

Also, you do not need to except ValueError just to raise ValueError, when you use pytest.raises(ValueError): pytest will check if the exception is instanceof ValueError.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM