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

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

新規登録して質問してみよう
ただいま回答率
87.20%
JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

受付中

JUnit5のArgumentsProviderを@Nestedなクラス内に定義するには

kurogo
kurogo

総合スコア2

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0回答

0評価

0クリップ

352閲覧

投稿2021/10/20 12:38

JUnit5の特徴の一つとして、

  • static でない内部クラスをネストすることができる。
    これを利用して内部クラスをコンテキストごとに分け、共通の前提条件を外部のクラスに記述できる。
  • Parameterizedテストを書きやすい

という記述を見かけ、下記のようなテストクラスを作成しました。
TestCaseAクラスは内部クラスContextAで使用されるパラメータクラス、
TestCaseBクラスは内部クラスContextBで使用されるパラメータクラスとします。

テストメソッドは内部クラスにありますが、それが使用するパラメータは外側のクラスに定義されているためより近い位置に記述したいと考えています。
しかし、パラメータクラスを内部クラスの内側に移動しようとすると、innerクラス内なのでstaticクラスとしては実装できず、かと言って非staticクラスとして実装するとstaticクラスである必要があるというエラーが出ます。

パラメータクラスを非staticクラスとしてエラーを回避する方法はあるのでしょうか。

もしくは、考え方が間違っていて各内部クラスに同様のパラメータクラスを使用するメソッドを実装すべきなのでしょうか。
しかし、前提条件等が変われば期待する結果も変わってくるので使い回すことはできないようにも思います。

アドバイスをお願いいたします。

Kotlin

internal class TestClass { lateinit var testTarget: TestTargetClass lateinit var mockRepository: RepositoryClass @BeforeEach fun setUp() { } private class TestCaseA : ArgumentsProvider { override fun provideArguments(context: ExtensionContext?): Stream<out Arguments> = Stream.of( Arguments.arguments(/*テスト用のパラメータと期待する結果を生成*/) ) } private class TestCaseB : ArgumentsProvider { override fun provideArguments(context: ExtensionContext?): Stream<out Arguments> = Stream.of( Arguments.arguments(/*テスト用のパラメータと期待する結果を生成*/) ) } @Nested inner class ContextA { @BeforeEach fun setUp() { mockRepository = mock { //Mock処理 } testTarget = TestTargetClass(mockRepository) } @ParameterizedTest @ArgumentsSource(TestCaseA::class) fun TestA(source: Int, result: Int) { //AssertJでテスト Assertions.assertThat(taetTarget.testMethod) } } //以下ContextB,ContextC~ }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。