JUnit 5 のメソッドとクラスの可視性の変更

2020年12月21日発行
アラン・リチャードソン著
ケーススタディ

JUnit 5 のメソッドとクラスの可視性の変更

2020年12月21日発行
アラン・リチャードソン著
リソースを見る
リソースを見る

JUnit 5 のメソッドとクラスの可視性の変更

プログラミングの楽しさの1つは、常に最新の状態を保つために必要な学習です。Sensei は、非推奨のパターンを特定し、今後使用するための修正方法を提示することで、移行を支援します。

例えば、JUnit 4からJUnit 5に移行したとき、私はテストクラスやメソッドをすべてpublicに書くことに慣れていました。しかし、JUnit 5では、それらをパッケージ・プライベートにすることができます。

e.g. instead of:

public class Junit5VisibilityTest {
    @Test
    public void thisDoesNotNeedToBePublic(){
        Assertions.assertTrue(true);
    }
}


本当は書きたいんだけどね。

class Junit5VisibilityTest {
    @Test
    void thisDoesNotNeedToBePublic(){
        Assertions.assertTrue(true);
    }
}


このようにコーディングするためのマッスルメモリーを構築するのに時間がかかり、今でもたまに失敗することがあります。

使用方法Sensei

Sensei を使えば、パブリックなメソッドやクラスを見つけて、宣言をパッケージ・プライベートに自動的に修正するレシピを作ることができます。

そのために、私はレシピを作りました。

名前 - JUnit:JUnit 5 test methods do not need to be public
説明 - JUnit 5 test methods do not need public visibility
レベル - エラー


私は、このコーディング手法を根絶したいと考え、IDEでコードを書いているときにこの問題をより明確にしたいと考え、この問題をErrorに分類しました。

クラス宣言の修正

クラスを見つけるために、私はJunit 5の@Testの子アノテーションを持つすべてのクラスを検索します(org.junit.jupiter.api.Testなど)。

そして、そのクラスが修飾子 public を持つ場合。

search:
class:
with:
child:
annotation:
type:"org.junit.jupiter.api.Test"
modifier:"public"

そして、クイックフィックスでは、モディファイアを変更して可視性を取り除き、デフォルトにします。

availableFixes:
- name: "remove public visibility from JUnit 5 Test class"
actions:
- changeModifiers:
visibility:""



メソッド宣言の修正

メソッド宣言の修正レシピは、クラスのレシピとほぼ同じです。

まず、JUnit 5の@Testでアノテーションされたパブリックメソッドを探します。

search:
method:
annotation:
type:"org.junit.jupiter.api.Test"
modifier:"public"


そして、モディファイアをデフォルトの可視性に変更します。

availableFixes:
- name: "Remove @Test method public visibility"
actions:
- changeModifiers:
visibility:""


ヒント:複数のメソッドを修正する

Sensei は、現在のファイルのすべての違反にQuickFixを適用する機能を持っています。

alt+enterでQuickFixを適用した場合。

QuickFixの名前のメニューを展開すると、以下のようなオプションがあります。

"Fix All: 'JUnit:JUnit 5 test methods do not need to be public "の問題をファイルに記載"

このオプションを選択すると、Sensei は、私が選択したものだけでなく、すべての問題の発生を修正します。


テスト方法公開の削除

クラスの修正

メソッドがパブリックである必要がないのと同じように、クラスもパブリックである必要はありません。

レシピとQuckFixを作成してクラスを修正することができます。

名前 - JUnit:Junit 5 Test classes do not need to be public
説明 - Junit 5 Test classes do not need to be public
レベル - エラー


公開されているクラスで、@Testアノテーションが付いたメソッドを見つけたとき。そして、可視性を変更したいと思います。

search:
class:
modifier:"public"
anyOf:
- child:
method:
annotation:
type:"Test"


再びchangeModifiersアクションでクラス定義の変更を行うことができます。

availableFixes:
- name: "Remove @Test class public visibility"
actions:
- changeModifiers:
visibility:""


概要

静的解析ツールは、当初、JUnitのこの推奨されるアプローチを警告してくれました。しかし、静的解析ツールでは、プログラミング中に自分のコードを変更するための筋肉の記憶を作ることはできませんでした。

レベル」を使って警告します。コーディングで解決しようとしている問題の場合、最初は「エラー」にして、コーディングのアプローチから自分を解放していくように、このレベルを下げていきます。

なお、Sensei は、QuickFix を適用する際にドロップダウンメニューオプションを使用することで、現在のファイルのすべての問題を同時に修正することができます。

Sensei レシピを作成することで、これまでの自分のコーディング手法をリアルタイムで確認することができます。そして、たまにコーディングに失敗しても、そのアプローチを強化するためにQuickFixすることができます。

---

IntelliJの「Preferences ‾ Plugins」(Mac)または「Settings ‾ Plugins」(Windows)から、「sensei secure code」を検索して、「Sensei 」をインストールすることができます。

このためのソースコードとレシピは、Secure Code Warrior GitHubアカウントの`sensei-blog-examples`リポジトリの`junitexamples`モジュールにあります。



リソースを見る
リソースを見る

著者

アラン・リチャードソン

もっと知りたい?

セキュアコーディングに関する最新の知見をブログでご紹介しています。

当社の豊富なリソースライブラリは、安全なコーディングアップスキルに対する人間的なアプローチを強化することを目的としています。

ブログを見る
もっと知りたい?

開発者主導のセキュリティに関する最新の研究成果を入手する

ホワイトペーパーからウェビナーまで、開発者主導のセキュアコーディングを始めるために役立つリソースが満載のリソースライブラリです。今すぐご覧ください。

リソース・ハブ

JUnit 5 のメソッドとクラスの可視性の変更

2020年12月21日発行
アラン・リチャードソン著

JUnit 5 のメソッドとクラスの可視性の変更

プログラミングの楽しさの1つは、常に最新の状態を保つために必要な学習です。Sensei は、非推奨のパターンを特定し、今後使用するための修正方法を提示することで、移行を支援します。

例えば、JUnit 4からJUnit 5に移行したとき、私はテストクラスやメソッドをすべてpublicに書くことに慣れていました。しかし、JUnit 5では、それらをパッケージ・プライベートにすることができます。

e.g. instead of:

public class Junit5VisibilityTest {
    @Test
    public void thisDoesNotNeedToBePublic(){
        Assertions.assertTrue(true);
    }
}


本当は書きたいんだけどね。

class Junit5VisibilityTest {
    @Test
    void thisDoesNotNeedToBePublic(){
        Assertions.assertTrue(true);
    }
}


このようにコーディングするためのマッスルメモリーを構築するのに時間がかかり、今でもたまに失敗することがあります。

使用方法Sensei

Sensei を使えば、パブリックなメソッドやクラスを見つけて、宣言をパッケージ・プライベートに自動的に修正するレシピを作ることができます。

そのために、私はレシピを作りました。

名前 - JUnit:JUnit 5 test methods do not need to be public
説明 - JUnit 5 test methods do not need public visibility
レベル - エラー


私は、このコーディング手法を根絶したいと考え、IDEでコードを書いているときにこの問題をより明確にしたいと考え、この問題をErrorに分類しました。

クラス宣言の修正

クラスを見つけるために、私はJunit 5の@Testの子アノテーションを持つすべてのクラスを検索します(org.junit.jupiter.api.Testなど)。

そして、そのクラスが修飾子 public を持つ場合。

search:
class:
with:
child:
annotation:
type:"org.junit.jupiter.api.Test"
modifier:"public"

そして、クイックフィックスでは、モディファイアを変更して可視性を取り除き、デフォルトにします。

availableFixes:
- name: "remove public visibility from JUnit 5 Test class"
actions:
- changeModifiers:
visibility:""



メソッド宣言の修正

メソッド宣言の修正レシピは、クラスのレシピとほぼ同じです。

まず、JUnit 5の@Testでアノテーションされたパブリックメソッドを探します。

search:
method:
annotation:
type:"org.junit.jupiter.api.Test"
modifier:"public"


そして、モディファイアをデフォルトの可視性に変更します。

availableFixes:
- name: "Remove @Test method public visibility"
actions:
- changeModifiers:
visibility:""


ヒント:複数のメソッドを修正する

Sensei は、現在のファイルのすべての違反にQuickFixを適用する機能を持っています。

alt+enterでQuickFixを適用した場合。

QuickFixの名前のメニューを展開すると、以下のようなオプションがあります。

"Fix All: 'JUnit:JUnit 5 test methods do not need to be public "の問題をファイルに記載"

このオプションを選択すると、Sensei は、私が選択したものだけでなく、すべての問題の発生を修正します。


テスト方法公開の削除

クラスの修正

メソッドがパブリックである必要がないのと同じように、クラスもパブリックである必要はありません。

レシピとQuckFixを作成してクラスを修正することができます。

名前 - JUnit:Junit 5 Test classes do not need to be public
説明 - Junit 5 Test classes do not need to be public
レベル - エラー


公開されているクラスで、@Testアノテーションが付いたメソッドを見つけたとき。そして、可視性を変更したいと思います。

search:
class:
modifier:"public"
anyOf:
- child:
method:
annotation:
type:"Test"


再びchangeModifiersアクションでクラス定義の変更を行うことができます。

availableFixes:
- name: "Remove @Test class public visibility"
actions:
- changeModifiers:
visibility:""


概要

静的解析ツールは、当初、JUnitのこの推奨されるアプローチを警告してくれました。しかし、静的解析ツールでは、プログラミング中に自分のコードを変更するための筋肉の記憶を作ることはできませんでした。

レベル」を使って警告します。コーディングで解決しようとしている問題の場合、最初は「エラー」にして、コーディングのアプローチから自分を解放していくように、このレベルを下げていきます。

なお、Sensei は、QuickFix を適用する際にドロップダウンメニューオプションを使用することで、現在のファイルのすべての問題を同時に修正することができます。

Sensei レシピを作成することで、これまでの自分のコーディング手法をリアルタイムで確認することができます。そして、たまにコーディングに失敗しても、そのアプローチを強化するためにQuickFixすることができます。

---

IntelliJの「Preferences ‾ Plugins」(Mac)または「Settings ‾ Plugins」(Windows)から、「sensei secure code」を検索して、「Sensei 」をインストールすることができます。

このためのソースコードとレシピは、Secure Code Warrior GitHubアカウントの`sensei-blog-examples`リポジトリの`junitexamples`モジュールにあります。



弊社製品や関連するセキュアコーディングのトピックに関する情報をお送りする許可をお願いします。当社は、お客様の個人情報を細心の注意を払って取り扱い、マーケティング目的で他社に販売することは決してありません。

送信
フォームを送信するには、「Analytics」のCookieを有効にしてください。完了したら、再度無効にしてください。