Mock,UnitTest,JSON

时间:2015-04-04 03:09:34

标签: python json unit-testing

创建单元测试时遇到问题,以确保我喜欢的方法运行良好。使用nodetests运行它虽然没有覆盖。

import unittest
from mock import Mock, patch, MagicMock
from django.conf import settings
from hackathon.scripts.steam import *


class SteamTests(unittest.TestCase):

    def setup(self):
        self.API_URL = 'http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/'
        self.APIKEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'
        self.userID = 'Marorin'
        self.steamnum = '76561197997115778'

    def testGetUserIDNum(self):
        '''Test for steam.py method'''

        # Pulling from setUp
        userID = self.userID
        API_URL = self.API_URL
        APIKEY = self.APIKEY   

        # constructing the URL
        self.url = API_URL + '?' + APIKEY + '&' + userID

        with patch('hackathon.scripts.steam.steamIDpulling') as mock_steamIDPulling:
            # Mocking the return value of this method.
            mock_steamIDpulling = 76561197997115778
            self.assertEqual(steamIDPulling(userID,APIKEY),mock_steamIDpulling)

提取信息的方法:

    def steamIDPulling(SteamUN,key): 
#Pulls out and returns the steam id number for use in steam queries. steaminfo = {'key': key,'vanityurl': SteamUN} 
a = requests.get('api.steampowered.com/ISteamUser/ResolveVanityURL/v0001/';, params=steaminfo)
 k = json.loads(a.content) 
SteamID = k['response']['steamid'] 
return SteamID

1 个答案:

答案 0 :(得分:0)

# Mocking the return value of this method.
mock_steamIDpulling = 76561197997115778

应该是:

# Mocking the return value of this method.
mock_steamIDpulling.return_value = 76561197997115778

但是,你的代码并没有多大意义。如果您尝试测试steamIDpulling的返回值,请执行以下操作:

def testGetUserIDNum(self):
    '''Test for steam.py method'''

    # Pulling from setUp
    userID = self.userID
    API_URL = self.API_URL
    APIKEY = self.APIKEY   

    # constructing the URL
    self.url = API_URL + '?' + APIKEY + '&' + userID
    self.assertEqual(steamIDPulling(userID,APIKEY), 76561197997115778)

只有在需要更改测试方法中的值时才需要进行模拟(除非您测试mock库)。要模拟请求库,请执行:

def testGetUserIDNum(self):
    '''Test for steam.py method'''

    # Pulling from setUp
    userID = self.userID
    API_URL = self.API_URL
    APIKEY = self.APIKEY   

    # constructing the URL
    self.url = API_URL + '?' + APIKEY + '&' + userID
    with patch("requests.get") as mock_requests_get:
        mock_requests_get.return_value = """{"response": {"streamid":76561197997115778}}"""
        self.assertEqual(steamIDPulling(userID,APIKEY), 76561197997115778)