2016-09-22 9 views
1

に私はこのようないくつかのコードがあります:は異なる戻り値を持つ2つのRedisのhgetsをモック同じPython関数

import redis 

redis_db = redis.Redis(host=redis_host_ip, port=redis_port, password=redis_auth_password) 

def mygroovyfunction(): 
    var_a = redis_db.hget(user, 'something_a') 
    var_b = redis_db.hget(user, 'something_b') 
    if var_a == something_a: 
     return Response(json.dumps({}), status=200, mimetype='application/json') 
    if var_b == something_b: 
     return Response(json.dumps({}), status=400, mimetype='application/json') 

をしてから、このテストユニット用tests.pyファイルで、私はこのようないくつかのコードを持っています:

import unittest 
from mock import MagicMock, Mock, patch 

@patch('redis.StrictRedis.hget', return_value='some value') 
class MyGroovyFunctionTests(unittest.TestCase): 
    def test_success(self, mock_redis_hget): 
     response = self.app.get('mygroovyfunction') 
     self.assertEqual(response.status_code, 200) 

私はこの質問には関係しないので、いくつか他のフラスコのものがあります。

私が知りたかったのは、個々のredis hgetの戻り値をモックすることが可能な場合でした。私の現在のコードでは、返された戻り値はvar_bに置き換えられます。したがって、テストケースが実行されるとvar_aも同じ値になり、コードはreturn status_codeが400になるパスになります。

このようなことを行う正しい方法は?

答えて

2

[OK]を私はここで答えを見つけました:その質問に対してPython mock multiple return values

受け入れ答えはside_effectを使用して、それ与えられますhget値とその各パッチの適用のRedisのリストにすることですこれは、私が探していたものですリスト内の各値私は:)

を探していた答えを

import unittest 
from mock import MagicMock, Mock, patch 

@patch('redis.StrictRedis.hget', side_effect=['something_a','something_b']) 
class MyGroovyFunctionTests(unittest.TestCase): 
    def test_success(self, mock_redis_hget): 
     response = self.app.get('mygroovyfunction') 
     self.assertEqual(response.status_code, 200) 

おかげhttps://stackoverflow.com/users/100297/martijn-pieters:だから私の例のために解決策は、これを行うことです

関連する問題