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

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

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

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

Java

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

Q&A

解決済

1回答

3549閲覧

JUnit4でRunnnerを改造してテストメソッドごとにテスト実行したいです

peishun

総合スコア30

JUnit

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

Java

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

0グッド

1クリップ

投稿2016/12/19 04:05

JUnitでテスト実行を組み込んでいるJavaプログラムがあり、JUnit4のライブラリ上のRunnerクラス(BlockJUnit4ClassRunner)ではクラス単位でテストを実行します。

Java

1//テスト対象クラス取得 2String className = "com.sample.sampleTests.sampleTest"; 3Class<?> testClass = Class.forName(className); 4 5//テスト対象クラスを引数にRunnerを作成 6Runner runner = new BlockJUnit4ClassRunner(testClass); 7 8//テスト実行 9Result result = (new JUnitCore()).run(runner);

これを以下のようにテストメソッドを引数にしてBlockJUnit4ClassRunnerを使えるように改造したいのですが、どのように改造すればそれが可能か、ご存知の方教えていただきたいです。

Java

1//テスト対象クラス取得 2String className = "com.sample.sampleTests.sampleTest"; 3Class<?> testClass = Class.forName(className); 4 5//テスト対象クラスのメソッド取得 6Method[] methods = testClass.getMethods(); 7 8for(Method method : methods){ 9 //@Testのメソッドかを判定 10 if(method.getAnnotation(Test.class)){ 11 //テストメソッドを引数にRunnerを作成 12 Runner runner= new CustomBlockJUnit4ClassRunner(method); 13 //テスト実行 14 Result result = (new JUnitCore()).run(runner); 15 } 16} 17 18//JUnitテスト実行 19Result result = (new JUnitCore()).run(runner);

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

A-pZ

2017/01/08 03:04

JUnit4.11の実行環境はすでに@Testがついているテストメソッド"のみ"実行しますが、あえてBlockJUnit4ClassRunnerのインスタンスを生成して実行した意図は何でしょうか。また、CustomBlockJUnit4ClassRunnerの実装がないだめ、その実現したい内容がわかりにくいので、CustomBlockJUnit4ClassRunnerの実装も記載することで、より明確な回答が得られると思料します。
guest

回答1

0

ベストアンサー

こんな感じで出来るのではないでしょうか?

java

1import java.lang.reflect.Method; 2 3import org.junit.runner.Description; 4import org.junit.runner.notification.RunNotifier; 5import org.junit.runners.BlockJUnit4ClassRunner; 6import org.junit.runners.model.FrameworkMethod; 7import org.junit.runners.model.InitializationError; 8 9public class CustomBlockJUnit4ClassRunner extends BlockJUnit4ClassRunner { 10 11 private Method method; 12 13 public CustomBlockJUnit4ClassRunner(Method method) throws InitializationError { 14 15 super(method.getDeclaringClass()); 16 this.method = method; 17 } 18 19 @Override 20 protected void runChild(final FrameworkMethod method, RunNotifier notifier) { 21 Description description = describeChild(method); 22 if (!method.getMethod().equals(this.method)) { 23 notifier.fireTestIgnored(description); 24 } else { 25 runLeaf(methodBlock(method), description, notifier); 26 } 27 } 28}

投稿2017/02/07 12:22

7tsuno

総合スコア310

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問