Tôi chỉ thấy rằng một loạt các bài kiểm tra đơn vị không thành công, do một nhà phát triển đã không chế nhạo sự phụ thuộc vào một khách hàng redis trong thử nghiệm. Tôi đang cố gắng đưa tay vào vấn đề này nhưng lại gặp khó khăn.Làm thế nào để giả lập một ứng dụng redis trong Python?
Phương pháp ghi vào một khách hàng redis:
redis_client = get_redis_client()
redis_client.set('temp-facility-data', cPickle.dumps(df))
Sau đó trong khẳng định kết quả được lấy ra:
res = cPickle.loads(get_redis_client().get('temp-facility-data'))
expected = pd.Series([set([1, 2, 3, 4, 5])], index=[1])
assert_series_equal(res.variation_pks, expected)
tôi quản lý để vá get client redis của() và set() thành công .
@mock.patch('redis.StrictRedis.get')
@mock.patch('redis.StrictRedis.set')
def test_identical(self, mock_redis_set, mock_redis_get):
mock_redis_get.return_value = ???
f2 = deepcopy(self.f)
f3 = deepcopy(self.f)
f2.pk = 2
f3.pk = 3
self.one_row(f2, f3)
nhưng tôi không biết làm thế nào để thiết lập return_value
của get()
những gì set()
sẽ thiết lập trong các mã, do đó kiểm tra sẽ vượt qua.
Ngay bây giờ dòng này không kiểm tra:
res = cPickle.loads(get_redis_client().get('temp-facility-data'))
TypeError: must be string, not MagicMock
Bất cứ lời khuyên được không?
sử dụng 'side_effect' với một đối tượng chia sẻ là đặt trong tập hợp 'side_effect' và trả về' get_ side_effect'? https://docs.python.org/3/library/unittest.mock.html#quick-guide – user3012759