私はプログラミングに若干の新しさを感じていますが、私のプログラムのほとんどは単一ディレクトリの仕事でしたが、今はもっと大きなものを試してみたいと思います。 。私はpytestを使ってユニットテストを作成し、test_foo.pyファイルのユニットテスト定義の後に独立したテストスクリプトを置いています。 __init__.pyファイルを追加するまで、これはうまく動作します。pytestはPythonシェルとは異なるインポート文を必要とする場合があります
ファイルの配置import card as crd
を使用して1
StackOverflow
| card.py
| test_card.py
test_card.py輸入カード。
結果:私は同じ、$ python3 test_card.py
はまだ動作import文を残したが、$ pytest
被った場合:どちらも次のコマンドのははImportError
$ python3 test_card.py
$ pytest
ファイルの配置に2
StackOverflow
| __init__.py
| card.py
| test_card.py
の検索結果を受けませんImportError。
代わりにimport StackOverflow.card as crd
を使用すると、pytestは再び動作を開始しますが、ImportErrorが原因でスクリプトとして実行できません。
この例では__init__.py
ファイルは必要ありませんが、大きなプログラムの一部に過ぎません。 2番目のimport文は単なる間違っていることも指摘されています。では、pytestに元のimport文を使用するにはどうすればよいですか? card.pyの
本文:
#Created by Patrick Cunfer
#2017-07-15
class Card(object):
def __init__(self, value, suit):
'''
Sets the card's value and suit
param value: An integer from 1 to 13
param suit: A character representing a suit
'''
self.value = value
self.suit = suit
def __str__(self):
return str(self.value) + " of " + str(self.suit)
test_card.py
#Created by Patrick Cunfer
#2017-07-15
# First one breaks pytest, second one breaks shell
# import card as crd
# import StackOverflow.card as crd
def test_Card():
test = crd.Card(5, 'S')
assert test.value == 5
assert test.suit == 'S'
assert str(test) == "5 of S"
del test
if __name__ == "__main__":
#Unit test found a bug? Lets isolate it!
print("Test 1")
test = crd.Card(5, 'S')
print(test.suit)
print("Expect 'S'")
print()
#etc.
私はこの例ではinitファイルは必要ないと知っていますが、私の実際のプログラムではそうしています。 –
私の答えはあなたの質問またはエラーに対処しましたか? – otayeby
部分的には、import文の使用方法に関する混乱が解消されましたが、pytestがそのように使用されても機能しないという事実には対処できませんでした。私のファイル構造はあなたの答えが描写されているようには見えません(私は再確認しました)。 –