簡體   English   中英

如何在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM