![](/img/trans.png)
[英]How to write a proper unit test case for this middleware file django?
[英]How to write Unit Test in Django
我正在嘗試編寫單元測試,但是我是django的新手,並且不確定如何測試此功能。 據我所知,一切都是在手動測試時都有效,但是建議為它編寫一個單元測試。
我有這個功能:
def time_encode(hours):
now = timezone.now().replace(second=0, microsecond=0)
remainder = now.minute % 15
delta = (15 - remainder)
timeFrom = now + timedelta(minutes=delta)
timeTo = timeFrom + timedelta(hours=hours)
return (timeFrom, timeTo)
在此視圖中被稱為:
@csrf_exempt
def emulate_create(request):
args = json.loads(request.body, object_hook=utils._datetime_decoder)
resourceId, count, hours = args['resourceId'], args['count'], args['hours']
print resourceId
timeFrom, timeTo = utils.time_encode(hours)
print timeFrom
reservation = ReservationProspect(
byUser=request.user,
forUser=request.user,
resource=get_object_or_404(Resource, uuid=resourceId),
modality=get_object_or_404(Modality, name="online"),
timeFrom=timeFrom,
timeTo=timeTo,
count=count
)
return HttpResponse(
json.dumps(
[reservation.toDict()],
default=utils._datetime_encoder
)
)
我覺得我不應該在視圖中測試東西,但是我應該在幾個測試用例中測試time_encode函數,因為它的目的是在將來最接近的15分鍾間隔返回timeFrom,而timeTo則是“ hours”參數遠離timeFrom。 同樣重要的是,返回的日期時間始終以秒和毫秒為零。 您對如何測試此代碼有何建議?
我想至少要為該功能編寫兩個單元測試(一個用於檢查給定輸入是否生成了預期的輸出。
然后,另外,我將為視圖本身編寫一些測試,例如,它會生成預期的輸出嗎? 預期會返回404嗎?
我也考慮考慮測試這個ReservationProspect類,以防它屬於您。
很多測試,但是我通常會遵循測試驅動的開發並在可能的情況下提前編寫測試。 對我來說真的很好。
...順便說一下,如果您有關測試Django / Python的問題更籠統-Django的網頁https://docs.djangoproject.com/en/1.8/topics/testing/overview/以及教程: https : //docs.djangoproject.com/en/1.8/intro/tutorial05/
from django.test import TestCase
class ViewTest(TestCase):
def test_view_returns_OK(self):
response = self.client.get('/')
self.assertEqual(response.status_code,200)
class FunctionTest(TestCase):
def test_function_returns_expected_result(self):
response = time_encode(10)
expected = "XYZ"
self.assertEqual(response, expected)
關於您對進口的評論:
from utils import time_encode
-在上述導入之后,您可以將其用作time_encode
import utils
-在上述導入之后,您必須將其用作utils.time_encode
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.