[解決済み] 長い関数名を複数行に渡って分割することは可能ですか?
質問
私たちの開発チームは、PEP8リンターを使用しています。 行の長さは最大80文字です。 .
私がpythonでユニットテストを書いているとき、私が好きなのは 説明的なメソッド名 を付けて、それぞれのテストが何をするのか説明するのが好きです。しかし、これはしばしば文字数制限を超えることになります。
長すぎる関数の例です。
class ClientConnectionTest(unittest.TestCase):
def test_that_client_event_listener_receives_connection_refused_error_without_server(self):
self.given_server_is_offline()
self.given_client_connection()
self.when_client_connection_starts()
self.then_client_receives_connection_refused_error()
私のオプション
-
もっと短いメソッド名を書けばいいじゃない!
わかってるんだけど、テスト名の記述性を失いたくないんだよね。
-
長い名前を使う代わりに、各テストの上に複数行のコメントを書くことができます!
これは良いアイデアですが、IDE (PyCharm) 内でテストを実行するときにテスト名を見ることができなくなります。
-
おそらく、バックスラッシュ(論理的な行の継続文字)で行を継続することができます。
残念ながらこれはPythonのオプションではありません、Danの回答で言及されているように。
-
テストのlint化をやめればいい。
これはある意味で理にかなっていますが、よくフォーマットされたテストスイートを奨励するのはいいことです。
-
行数制限を増やせばいいんじゃない?
私たちのチームは、狭いディスプレイでも読みやすいコードを維持するのに役立つので、この制限を設けることを好んでいます。 ベスト オプションではありません。
-
を削除することができます。
test
を削除してください。これはオプションではありません。Pythonのテストランナーは、すべてのテストメソッドの先頭に
test
で始まる必要があり、そうでなければ拾えません。編集:テストランナーによっては、テスト関数を検索するときに正規表現を指定できるものもありますが、プロジェクトで働くすべての人に余分な設定を強いることになるので、私はこれをやりたくはありません。
-
EventListenerを独自のクラスに分離して、別々にテストすることができます。
イベントリスナー は を独自のクラスにしています (そしてテストされています)。それは、ClientConnectionの中で起こるイベントによってトリガーされるインターフェースに過ぎません。この種の提案は良い意図を持っているように見えますが、誤った方向に誘導され、元の質問に答える助けにはなりません。
-
BDD Frameworkのようなものを使うことができます。 振舞う . これは、表現力豊かなテストのために設計されています。
これは本当で、今後もっと使っていきたいと思っています。行をまたいで関数名を分割する方法はまだ知りたいところですが。
最終的には...
Pythonで次のような方法はありますか? 長い関数宣言を複数行に渡って分割する ?
例えば...
def test_that_client_event_listener_receives_
connection_refused_error_without_server(self):
self.given_server_is_offline()
self.given_client_connection()
self.when_client_connection_starts()
self.then_client_receives_connection_refused_error()
それとも、自分で噛み砕いて短くするしかないのでしょうか?
どのように解決するのですか?
いいえ、これは不可能です。
ほとんどの場合、読みやすさと関数の使いやすさの観点から、このような長い名前は望ましくありません。しかし、テスト名の使用例はかなり合理的であると思われます。
その
の辞書的なルールは
の字句規則では、一つのトークン (この場合は識別子) が複数の行にまたがって分割されることは許されません。論理的な行の継続文字 (
\
は複数の物理行を一つの論理行に結合することはできますが、一つの
トークン
を複数の行にまたがるように結合することはできません。
関連
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] 複数行の長い文字列を作成するためのPythonicな方法
-
[解決済み] 関数名を文字列として取得するには?
-
[解決済み] 多重ループから抜け出すには?
-
[解決済み】典型的なテストディレクトリ構造でunittestを実行する
-
[解決済み】コマンドラインからunittest.TestCaseのテストを1つ実行する
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] PythonでSVGからPNGに変換する
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] if 節の終了方法
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] 特定のファイルでpep8エラーを無効にするには?