【发布时间】:2016-05-10 11:28:18
【问题描述】:
我遇到了一个非常令人困惑的问题。
我为我的一个对象编写了一个单元测试,其中包含 2 个测试用例:
# coding=utf-8
import unittest
from unittests.helper_functions import *
fix = {}
... Test Data is initialized here
check_if_test_bucket_is_used()
check_if_cb_credentials_are_set()
print "Flushing Bucket"
flush_test_bucket(CB_HOST, CB_USER, CB_PASS)
print "Starting Tests"
create_admin_user()
def testD_post_vehicle_by_driver(self):
res_vehicle = post_data('/drivers/vehicles', valid_vehicle_0, auth_obj=None,
headers={'Authorization': 'WebAuth %s' % fix['token'],
'Content-Type': 'application/json',
'Accept': 'application/json'})
driver = cb_find_by_key(valid_driver_0_key)
self.assertIn(valid_obj_0_key, driver[MISSING_KEY])
print driver
def testE_get_vehicle_by_driver(self):
res_single_vehicle = get_data('/vehicles/12345', auth_obj=None,
headers={'Authorization': 'WebAuth %s' % fix['token'],
'Content-Type': 'application/json',
'Accept': 'application/json'})
在testD 和testE 之间,密钥MISSING_KEY 从我的数据库对象中消失了。
所以当我在testD 中打印我的驱动程序对象时,仍然有一个值。在testE 中,甚至在我之前发布的获取这辆车的请求之前,Couchbase 中的值已经是null。
django 视图如下:
def post(self, request):
data = request.data
driver = request.user.details
vehicle = self.vehicle_bo.create_vehicle_by_driver(data, driver[m.ID])
return content_response(vehicle, VehicleModel, request, status_code=status.HTTP_201_CREATED)
我在return那里设置了一个断点,此时db中的值还是正确的。
函数content_response:
def content_response(response_obj, parser_class, request, status_code=status.HTTP_200_OK,
obj_modification_function=None, default='{}'):
if response_obj is None:
return default
# some json manipulation
response = Response(prepared_obj, status=status_code, headers=get_headers(request))
return response
同样在这里返回,值仍然保持不变。
据我所知,从这一点开始,一切都由 rest_framework 的响应处理,根本不应该进行任何数据库操作。
任何人有想法,这是从哪里来的?
一些进一步的信息:
- 在没有 unittest 框架的情况下发送所有请求不会导致 null 值
- 在所有测试 A-E 运行之前,我正在冲洗整个沙发底桶。
- 我正在使用 PyCharm 运行测试
【问题讨论】:
标签: python django unit-testing django-rest-framework couchbase