2

私は検索を行いましたが、私が求めていたものを見つけることができませんでした.

私のコードは次のとおりです。

import datetime
import doctest
import os


def parseOptions():

    import optparse
    parser = optparse.OptionParser(usage= '-h')
    parser.add_option('-d', '--difference', \
                      type= 'int')
    (options, args) = parser.parse_args()
    return options

now = datetime.datetime.now()
subtract = datetime.timedelta(days=10, hours=11)
difference = now - subtract

def checktime(now - b):
    """Returns a - b

    >>> checktime(now - 10)
    'now - 10'

    >>> checktime(now - 20)
    'now - 20'

    >>> checktime(now - 30)
    'now - 30'
    """
    return now - b

if__name__== "__main__":
    doctest.testmod()


print
print 'The time now is =', now.strftime("%I:%M:%S%p %a, %B %d %Y")
print 'The time minus the difference =', difference.strftime("%I:%M:%S%p %a, %B %d %Y")
print

続行する前に、現在の時間から数値 (10、20、30 時間) を引いた値が正しい出力を示していることを doctest でテストしたいと考えています。

コマンド プロンプトでスクリプトを実行すると、次のメッセージが表示されます。

2 items had no tests:
    time
    time.struct_time
0 tests in 2 items.
0 passed and 0 failed.
Test passed.

time と time.struct_time で定義されているものを見つけるためにビットとピースを変更しようとしましたが、惨めに失敗しました。

どんな助けでも大歓迎です!

4

1 に答える 1

3

Doctest は、関数が意図したとおりに機能しているかどうかをテストする場合に便利です。あなたの場合、引数bから時間を差し引いて差を返したいと思います。datetime

関数を次のように書き直しますsubtime

def subtime(a,b):
    subtract = datetime.timedelta(hours=b)
    difference = a - subtract
    return difference

doctest を実行するには、いくつかのサンプル呼び出し値と期待される結果を提供する必要があります。関数のコーナー ケース (奇妙なことが起こる可能性のある場所) について考えてください。それでは、いくつかのテストケースを作成しましょう

  1. 24時間未満を引く
  2. 正確に 24 時間を引きます
  3. 24時間以上引く
  4. 0時間を引く
  5. 数時間追加 (-ve 引数)

次に、それぞれの場合に関数がどのように呼び出されるかを書き留めます。datetime簡単にするために、最初の引数と同じものを使用します。now(スクリプトの実行時に値を予測できないなどの理由で、スクリプト変数を使用しないでください)

  1. subtime(datetime.datetime(2013,11,11,11,0),10)
  2. subtime(datetime.datetime(2013,11,11,11,0),24)
  3. subtime(datetime.datetime(2013,11,11,11,0),30)
  4. subtime(datetime.datetime(2013,11,11,11,0),0)
  5. subtime(datetime.datetime(2013,11,11,11,0),-5)

次に、(ペンと紙を使用して)各ケースの理想的な結果を計算します

  1. datetime.datetime(2013, 11, 11, 1, 0)
  2. datetime.datetime(2013, 11, 10, 11, 0)
  3. datetime.datetime(2013, 11, 10, 5, 0)
  4. datetime.datetime(2013, 11, 11, 11, 0)
  5. datetime.datetime(2013, 11, 11, 16, 0)

これをドキュメント文字列の関数に追加します""" """

def subtime(a,b):
    """ (datetime,int) -> datetime 
    Subtract b hours from a datetime.datetime and return the new datetime object

    >>> subtime(datetime.datetime(2013,11,11,11,0),10)
    datetime.datetime(2013, 11, 11, 1, 0)

    >>> subtime(datetime.datetime(2013,11,11,11,0),24)
    datetime.datetime(2013, 11, 10, 11, 0)

    >>> subtime(datetime.datetime(2013,11,11,11,0),30)
    datetime.datetime(2013, 11, 10, 5, 0)

    >>> subtime(datetime.datetime(2013,11,11,11,0),0)
    datetime.datetime(2013, 11, 11, 11, 0)

    >>> subtime(datetime.datetime(2013,11,11,11,0),-5)
    datetime.datetime(2013, 11, 11, 16, 0)

    """
    subtract = datetime.timedelta(hours=b)
    difference = now - subtract
    return difference

あなたのスクリプトは今

import datetime
import doctest
import os

def parseOptions():

    import optparse
    parser = optparse.OptionParser(usage= '-h')
    parser.add_option('-d', '--difference', \
                      type= 'int')
    (options, args) = parser.parse_args()
    return options
now = datetime.datetime.now()

def subtime(a,b):
    """ (datetime,int) -> datetime 
    Subtract b hours from a datetime.datetime and return the new datetime object

    >>> subtime(datetime.datetime(2013,11,11,11,0),10)
    datetime.datetime(2013, 11, 11, 1, 0)

    >>> subtime(datetime.datetime(2013,11,11,11,0),24)
    datetime.datetime(2013, 11, 10, 11, 0)

    >>> subtime(datetime.datetime(2013,11,11,11,0),30)
    datetime.datetime(2013, 11, 10, 5, 0)

    >>> subtime(datetime.datetime(2013,11,11,11,0),0)
    datetime.datetime(2013, 11, 11, 11, 0)

    >>> subtime(datetime.datetime(2013,11,11,11,0),-5)
    datetime.datetime(2013, 11, 11, 16, 0)

    """
    subtract = datetime.timedelta(hours=b)
    difference = a - subtract
    return difference

if __name__== "__main__":
    doctest.testmod()    

print
print 'This is the time now -', now.strftime("%I:%M:%S %p %a, %B %d %Y")
difference=subtime(now,10)
print 'This is the time minus the difference -', difference.strftime("%I:%M:%S %p %a, %B %d %Y")
print

そして出力

$ python try.py 

This is the time now - 02:40:57 PM Tue, May 28 2013
This is the time minus the difference - 04:40:57 AM Tue, May 28 2013

doctest を使用すると、すべてのテストに合格すると、テスト関連の出力が得られないことに注意してください。(全て大丈夫)

于 2013-05-28T09:18:29.657 に答える