senseiを用いたパーソナルプログラミングプロセスの改善
注釈とメソッドの名前の変更
このポストのために、私は私がJUnitを学んでいたとき、私が使用した「悪い」コーディングアプローチを再現しました、そして、「悪い」パターンをSENSEIを使っている同意された、そして、「より良い」、コーディングパターンに変える方法を示します.
私がJUnitを学んでいたとき、私はいつでも私の頭の中でそんなに多くを保つことができました.私は、彼らが働いていなかったとき、テストをスキップする方法を常に忘れました.
我々がチームで働いているならば、我々はコーディングスタイルを実施するのを助けるために、プル・リクエストにコード・レビューを使用することができます.そして、より経験豊かなプログラマーとペアプログラミングをするとき、フィードバックサイクルを短くすることができます.
我々はまた、ツールを使用してプロセスを強化することができますし、ツールが正しいことを行うには、プロンプトがあります.Thoughtworksは、“ルールの上のツール”としてこれを記述Technology Radar listing for Sensei :
"make it easy to do the right thing over applying checklist-like governance rules and procedures"
JUnitテストの無効化
理想的には、私たちが知っているように
@Disabled
注釈と書き込み〜〜〜
障害者
void CanweaddWonumors () {
アサーション.失敗しました
}
〜〜〜
しかし、学習するとき、私は自分自身を訓練しなければならなかった
@Disabled
.テストメソッドを無効にする方法を忘れたときは
@Test
注釈と名前の変更〜〜〜
クラススキップ
void SKIPTHIScanWeAddTwoNumbers(){
Assertions.fail("this test was skipped and should not run");
}
}〜〜〜
それはよくなかったが、仕事を得た.私は先生が思い出すのを手伝うようなものを持っていなかったので、私は悪いコーディングパターンを使いました.
私がこのReadMe用にボード上で撮影したタスクは以下の通りです.
と@ disable注釈.
レシピ設定
私が先生と一緒に取る最初のステップは、“新しいレシピを追加する”と私はレシピが動作するようにコーディングパターンを検索することです.
Name: JUnit: Make @Disabled @Test from SKIPTHIS
Short Description: Stop naming methods SKIPTHIS, use @Disabled @Test instead
そして、私の検索は非常に簡単です.メソッド名と一致するように基本的なregexを使用します.〜〜〜
検索
メソッド:
名前
マッチします.
〜〜〜
クイックフィックス設定
QuickFixはコードを書き換えるので、もう少し複雑です.そして、私は私の最終的なコードを達成するためにいくつかのステップを使用します.
欲しいです
@Test
メソッドへの注釈@Disabled
メソッドへの注釈addAnnotation
フィックス.私が注釈の完全修飾名を使用するならば、先生は自動的に私のために輸入を加えます.〜〜〜
使用可能な修正
注釈
アクション
アノテーション:
アノテーション:
〜〜〜
sed
書き換え動作で.書換え動作は口ひげテンプレートであるので、senseiはテンプレートメカニズムにとても機能拡張を持っています.関数は
{{#...}}
だからsed
機能は{{#sed}}
. この関数はカンマ区切りの2つの引数をとります.最初の引数は
sed
文s/(.*) SKIPTHIS(.*)/$1 $2/
sed
この場合、このメソッドはメソッド自体であり、これは以下のように設定されます.{{{.}}}
- rewrite:
to: "{{#sed}}s/(.*) SKIPTHIS(.*)/$1 $2/,{{{.}}}{{/sed}}"
The
sed
実装では、引数自体がコンマを含んでいる場合、{{#encodeString}}
and {{/encodeString}}
-{{#encodeString}}{{{.}}}{{/encodeString}}
逆レシピ
これが例であり、Demosでこれを使いたいかもしれないので、senseiレシピを使って上記の変更を逆にする方法を模索したいと思いました.
それを通して考えて、私は注釈をつけられた方法を見つけたいです
@Disabled
しかし、クラスだけでSkipThisTest
デモを行う場所Name: JUnit: demo in SkipThisTest remove @Disabled and revert to SKIPTHIS
Short Description: remove @Disabled and revert to SKIPTHIS for demo purposes in the project
Level: warning
レシピ設定の検索は非常に簡単ですが、特定のクラスの注釈を一致させる.〜〜〜
検索
メソッド:
注釈
タイプ:「無効」
で
クラス
名前"skipthistest "
〜〜〜
コードがエラーであるように見えるのを避けるために、私はレシピの一般的な設定を警告であると定義しました.警告は、コードのハイライトで表示され、それは主要な問題があるようにコードを見ていない.
迅速な修正のために、我々はメソッドにマッチしたので、私は、リライト動作を使用し、変数を使用してテンプレートを設定します.
availableFixes:
- name: "Remove Disabled and rename to SKIPTHIS..."
actions:
- rewrite:
to: "{{{ returnTypeElement }}} SKIPTHIS{{{ nameIdentifier }}}{{{ parameterList\
\ }}}{{{ body }}}"
私は基本的に修飾子を除くすべての変数を追加しますSKIPTHIS
テンプレートへのテキスト.この修正プログラムは、修飾子を削除することによって、他の注釈も削除するという弱さを持っています.
追加アクション
私は別の名前の修正プログラムを追加することができますときに選択を与える
alt+enter
はクイックフィックスを表示するために使われる.availableFixes:
- name: "Remove Disabled and rename to SKIPTHIS..."
actions:
- rewrite:
to: "{{{ returnTypeElement }}} SKIPTHIS{{{ nameIdentifier }}}{{{ parameterList\
\ }}}{{{ body }}}"
target: "self"
- name: "Remove Disabled, keep other annotations, and rename to SKIPTHIS..."
actions:
- rewrite:
to: "{{#sed}}s/(@Disabled\n.*@Test)//,{{{ modifierList }}}{{/sed}}\n\
{{{ returnTypeElement }}} SKIPTHIS{{{ nameIdentifier }}}{{{ parameterList\
\ }}}{{{ body }}}"
target: "self"
ここでは、新しいクイックフィックスに追加の行を追加しました.{{#sed}}s/(@Disabled\n.*@Test)//,{{{ modifierList }}}{{/sed}}
これは修飾子リストを受け取り、それを文字列としてエンコードしsed
線を取り除く@Disabled
文字列から他のすべての行を修飾子に残します.注意:“”、
sed
, さもなければ、これはSENSEIがあなたに構文エラーをあなたに警告する方法であるので、コメントがプレビューに加えられるのを見ますsed
コマンド.ネストされたsed呼び出し
私は、両方にマッチすることができました
@Disabled
and @Test
単一の検索と置換.コードがより複雑で、SESコマンドのシーケンスが欲しかったとき、私はそれらを入れ子にすることでそれを行うことができます.
{{#sed}}s/@Test//,{{#sed}}s/@Disabled\n//,{{{ modifierList }}}{{/sed}}{{/sed}}
上の例では@Test
適用結果の置換@Disabled
置換{{{ modifierList }}}
.概要
sed
は、コードの書き換えを達成するための非常に柔軟な方法であり、それをネストすることが可能ですsed
関数は複雑な書き換え条件を呼び出す.このようなレシピは、しばしば私たちのプログラミングのプロセスを改善するためにそれらを使用しているため、一時的に終了し、一度我々は筋肉のメモリを構築し、もはや私たちは削除することができますまたは料理帳でそれらを無効に貧しいプログラミングパターンを使用しています.
注意:2つの利用可能な修正を加えるよりも、私はレシピをクローン化することができました、しかし、私がするならば、私は「クローンされたレシピのためにDependable Entryをチェックします」チェックボックスをチェックするのを覚えていなければなりません.
あなたは“設定\プラグイン”(Mac)または“設定\プラグイン”(Windows)を使用してIntellij内からsenseiをインストールできます.
このブログ記事のすべてのコードは
junitexamples
ブログの例リポジトリhttps://github.com/SecureCodeWarrior/sensei-blog-examples
Reference
この問題について(senseiを用いたパーソナルプログラミングプロセスの改善), 我々は、より多くの情報をここで見つけました https://dev.to/securecodewarrior/improving-a-personal-programming-process-using-sensei-hokテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol