質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

5699閲覧

pythonでpytestとモジュール化やディレクトリ階層化が上手くできない

ShortArrow

総合スコア141

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/10/08 08:51

前提・実現したいこと

pytestを実行する前に、通常のデバッグを実行したいのですが、
エラーになり上手くいかないです。

構文エラーやライブラリのインポートエラーがある場合など、
通常のデバッグが成功しない状態だと、
pytestでテストを検出できないことがあります。

このために、事前に通常のデバッグを行いたいと考えています。
また、モジュールデバッグでは、一括指定ができないです。

モジュールデバッグで一括の方法があればそれでもいいのかなとも思っています。
しかし、モジュールデバッグで一括だと機能として本末転倒な気もします。

発生している問題・エラーメッセージ

カレントファイルのデバッグでtest_name.pyをデバッグすると、
エラーになります。

例外が発生しました: ModuleNotFoundError No module named 'src' File "?\pytestdir2\tests\test_mod\test_name.py", line 2, in <module> from src.mod.__mod import human

該当のソースコード

イメージ説明

####test_name.py

python

1import pytest 2from src.mod.__mod import human 3from src.moon import moouman 4 5def test_name1(): 6 bb=human() 7 ss=bb.name() 8 assert ss=="hello" 9 10def test_name2(): 11 bb=moouman() 12 ss=bb.name() 13 assert ss=="ppppp" 14 15def test_name3(): 16 ss=human.howmanyfoot() 17 assert ss==3 18 19if __name__ == "__main__": 20 pass

####__mod.py

python

1class human(): 2 3 @classmethod 4 def name(self) -> str: 5 return 'hello' 6 7 @staticmethod 8 def howmanyfoot() -> int: 9 return 3 10 11def eee(self) -> int: 12 return 3

####moon.py

python

1class moouman(): 2 def name(self) -> str: 3 return 'ppppp'

__init__.pyはすべて空です。

####launch.json

json

1{ 2 // IntelliSense を使用して利用可能な属性を学べます。 3 // 既存の属性の説明をホバーして表示します。 4 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 5 "version": "0.2.0", 6 "configurations": [ 7 8 { 9 "name": "Python: モジュール", 10 "type": "python", 11 "request": "launch", 12 "cwd": "${workspaceFolder}", 13 "module": "tests.test_mod.test_name" 14 },{ 15 "name": "Python: モジュール2", 16 "type": "python", 17 "request": "launch", 18 "cwd": "${workspaceFolder}", 19 "module": "src.mod.__mod" 20 }, 21 { 22 "name": "Python: Current File", 23 "type": "python", 24 "request": "launch", 25 "program": "${file}", 26 "console": "integratedTerminal" 27 } 28 ] 29}

試したこと

モジュールデバッグと、pytestによるテストはすべてグリーンです。
イメージ説明

補足情報(FW/ツールのバージョンなど)

pytest latest
python 3 latest
miniconda 3 latest
windows 10 latest
vscode latest

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

vscode内で、PYTHONPATHが適切に設定されていないことが要因です。
PYTHONPATHの設定はいろいろな記述がありますが、なかなかうまくいきません。

以下を試してみてください。

  1. settings.jsonに以下を追記(既に記載があれば不要)

"python.envFile": "${workspaceFolder}/.env",

  1. ワークスペースフォルダ直下に .envを作成して以下を記載。

PYTHONPATH=./

これで「実行とデバッグ」のボタンから実行できると思います。

確認方法

ターミナルでecho $PYTHONPATHとしてもでてきませんが、コード内の始めの方にimport sys print(sys.path)と書いて、ワークスペースフォルダがパスの中に入っているかを確認してください。入っていれば、from srcsrcが認識できるはずです。

投稿2020/10/09 13:28

編集2020/10/11 23:28
toast-uz

総合スコア3266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShortArrow

2020/10/11 23:32

出来ました!ありがとうございます。 インテリセンスも効きます。 `import sys` `print(sys.path)` もワークスペース内のモジュールと、 minicondaの仮想環境がしっかり読み込めています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問