Santhosh
Santhosh

Reputation: 1791

Python Unittest for method returning json string

I ma new to writing python unit tests. I have a method in a class returning a Json response from an API. The JSON response contains attributes such as data, token, object name and status. The method hits API and returns response with different values each time, so I can't hard code a response and test it. How can I write a unit test for this type of method.

One thing, I thought of is to check whether the response is not null. Is there any other type of checks I can do here.

Each time it returns a different token, date(timestamp). The status will be same.

def Json_get_status(self):
    get_url = "xxxx" #URL to hit API
    r = requests.get(get_url)
    self.get_json = json.loads(r.text)
    self.get_token=self.get_json["token"]
    self.get_date=self.get_json["date"]
    self.get_status=self.get_json["status"]
    return self.get_json

Upvotes: 0

Views: 15743

Answers (2)

Diego Torres Milano
Diego Torres Milano

Reputation: 69388

You can use requests_mock to mock responses

import requests_mock
...


class Test(unittest.TestCase):
    @requests_mock.Mocker()
    def test_json_get_status(self, mocker):
        mocker.get("http://xxxx", text='{"token": "mock", "date": "mock", "status": "mock"}')
        self.assertIsNotNone(YourClass().json_get_status())

Upvotes: 0

michael salmon
michael salmon

Reputation: 416

If your method under test is supposed to "read the status correctly", then you might want to specifically test that.

So assuming your app is something like

def read_status(response):
    parsed = json.loads(response)
    # does other stuff
    return something

Then in your test_unit.py

def test_read_status(self):
   mock_input_val = {'something': 'good val'}
   expected_positive_return_val = something
   self.assertEqual(read_status(json.dumps(mock_input_val)),       
                    expected_positive_return_val)

Also good to do a negative test for the condition where read_status either fails to parse the json object or finds an error in the response.

Upvotes: 0

Related Questions