pytestを使用して単体テストを実行しようとしています。私のユニットテストコードにソースコードをインポートしてテストします。しかし、単体テストを行っている間、私はソースコード内のコードの一部を実行したりコメントアウトしたりしません。しかし、私はソースコードを変更することはできません。だから、実行中に私のソースコード内のコードブロックをコメントする方法はありますか?コードの一部のみを実行する方法
答えて
あなたが強くしようとしているのは、何らかの理由でユニットテストを実行できない場合、ソースコードをリファクタリングする必要があるということです。どんな解決策を思いついても、非常に壊れやすいでしょう。つまり、@ user7056566が指摘したように、文字列として読み込んだり(regexなどで)修正してからexecに電話するだけです。
個人的には、「無視したいコードの一部が自動テストでテストされている」という事実を無視します。 "パフォーマンスペナルティ"を受け入れ、ソースコードを変更しないでください。単純なオーバーヘッドよりもずっと悪いです。あなたがテストしているものが正当なコードであることを決して確かめることはできません。さらに、誰かがソースコードを修正する瞬間に、テストを中断させる可能性もあります。また、予期しない方法で(問題を捕らえることはできません)。
ありがとうございました。私はすべてのあなたの言葉を考えます。私はユニ・テストのために非常に新しいです。だから私はこれを求めていた。それでよかった。私は自分のソースコードをモジュール化し、単体テストの生活を楽にするよう努めます。これがより良い選択であることを願っています。 –
あなたは、インポートするソースコードを変更することなく、テストケース内のコードの特定の部分を '模擬'することができます。
>>> def foo():
... return 'bar'
...
>>> foo()
'bar'
>>> from unittest.mock import MagicMock
>>> placeholder = foo
>>> foo = MagicMock(return_value='bat')
>>> foo()
'bat'
>>> foo = placeholder
>>> foo()
'bar'
>>>
mocking HTTP呼び出し(REST APIなど)には、たくさんの模擬ツールがあります。ここには良いスタートがあります:https://blog.fugue.co/2016-02-11-python-mocking-101.html
私はモックを聞いたことがありません。どうもありがとう。これは非常に有益です。 –
ところで、これはunittestのもののようです。 pytestにこれに類似したものはありますか?それ以外の場合は、unittestがPythonでビルドされているので、unittestもインポートします。しかし、これは私のソースコードの一部を実行できないようにするにはどうすればよいでしょうか? –
https://pypi.python.org/pypi/pytest-mock/1.2にpytest.mockがありますが、試していません。スキップコードの実行に関しては、foo()は、インポートしたソースコードから実行をスキップしたいAPIです。しかし、ソースコードのいくつかの部分はfoo()を使用します。 foo()のいくつかの事前定義された戻り値で置き換えられるようにしたいと思います。 MagicMockはそれを手助けすることができます。 – Sharad
- 1. Blackfireでコードの一部のみをプロファイルする方法は?
- 2. PythonでCコードのほんの一部を実行する方法は?
- 3. コードの一部をサーバー上ではなくローカルで実行する方法
- 4. 一部の行のみを操作する方法
- 5. ストリームの一部で縮小操作を実行する方法
- 6. servicestackリクエストの検証コードのみを実行する方法
- 7. バックグラウンドでPythonコードの一部を実行する
- 8. 外部forループのみをスカラーで実行する方法は?
- 9. MapReduceジョブをHDFSファイルの一部でのみ実行する
- 10. VSTSリリースをステップの一部のみで再実行する方法(例:テストのみ)
- 11. Intellij IDEAとSpring Boot:Javaコードの一部のみを再起動する方法は?
- 12. SQLクエリの一部として外部プログラムを実行する方法は?
- 13. swift3で一度コードを実行する方法
- 14. 一部の変数と一致するホストのみの実行可能なプレイプレーン
- 15. 埋め込みasp.netページからコードを実行する方法
- 16. Pythonのcase文の内部でコードのブロックを実行する方法
- 17. T-SQLで複数のインスタンスを実行しているときにコードの一部を一度だけ実行する方法
- 18. コードの一部をルートとして実行
- 19. 可能性:一部のホストのみに役割を実行
- 20. PHP行う-ながら、次のコードを実行する一方で、SQLコード
- 21. Maven - アプリケーションの一部のモジュールのみをビルドする方法は?
- 22. のcrontabの実行スクリプトの一部のみ
- 23. サーバーサイド(nodejs)にhtmlコードの一部を生成する方法は?
- 24. コードの実行中に一意の識別子を取得する方法
- 25. ggplot2:時系列の一部のみをグラフ化する方法
- 26. CSSファイルをHTMLの一部のみに適用する方法
- 27. プロジェクトの一部のみをHerokuに配備する方法は?
- 28. Emberルートモデルの一部のみを約束する方法は?
- 29. ウェブページの一部のみでangular2を使用する方法
- 30. 要素の一部のみをアニメ化する方法
ソースコードを変更できない場合、どの部分を無視するべきでしょうか? – weidler
テストされたソースコードを変更する理由は何ですか?ユニットテストの考え方は、ソースをそのままテストすることです。私はこれが[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)であると言います。実際に達成したいことを教えてください。 – zvone
無視したい部分のコードは、自動テストでテストされています。私は実際にその部分を無視することができます。だから私はこれをやりたかったのです。 –