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

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

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

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

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

1回答

3786閲覧

JUnitで、同じメソッドを連続実行して、すべて異なる値を返す方法はあるでしょうか。

退会済みユーザー

退会済みユーザー

総合スコア0

JUnit

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

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2021/03/14 09:31

前提・実現したいこと

JUintでUTを実施するためのテストケースを作成しています。

以下のような内容のソースコードで、test.method()を3回連続実行してすべて異なる値を返すようにモック化したいのですが、良い方法はあるでしょうか。
環境の都合上、Mockitoやwhenは使用できません。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

testSource.java public class TestSource { private TestClass test: public void source01(int a,int b,int c) { String d = test.method(a); String e = test.method(b); String f = test.method(c); (以下省略) } }

試したこと

以前、以下のような方法を試しました。

public class testMock{
@Test()
public void test1(){
TestSource testSource = new MockUp<>(TestSource ){
}.getMockInstance();
TestClass testClass1 = new MockUp<>(TestClass){
@Mock
String method(String a)
{
return "AAA";
}
}.getMockInstance();
TestClass testClass2 = new MockUp<>(TestClass){
@Mock
String method(String a)
{
return "SSS";
}
}.getMockInstance();
TestClass testClass3 = new MockUp<>(TestClass){
@Mock
String method(String a)
{
return "DDD";
}
}.getMockInstance();

Method m = TestSource.class.getDeclaredMethod("source01",String.class,String.class,String.class);
m.setAccessible(true);

Field f1 = TestSource.class.getDeclaredField("method");
f1.setAccessible(true);
f1.set(testSource , testClass1);
Field f2 = TestSource.class.getDeclaredField("method");
f2.setAccessible(true);
f2.set(testSource , testClass2);
Field f3 = TestSource.class.getDeclaredField("method");
f3.setAccessible(true);
f3.set(testSource , testClass3);

m.invoke(testSource ,引数は省略);
}

実行した結果、test.method()の戻り値がすべて、最後に設定したtestClass3の値になっていました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

退会済みになっておられますが、
mockito の mock であれば、複数回のメソッド呼び出しに対応しているので、定義すれば可能とおもいます。

@ExtendWith(MockitoExtension.class) class Test { @Mock MockedClass mokcedClass; @Test void test() { doReturn("any") // 1回目の呼び出し .doReturn("some") // 2回目の呼び出し .when(mokcedClass) .get(anyString()) // get(String) メソッドのmock化 var ret1 = mokcedClass.get("value"); var ret2 = mokcedClass.get("value"); assertThat(ret1).isEqualTo("any"); // 1回目の呼び出し結果の assert assertThat(ret2).isEqualTo("some"); // 2回目の呼び出し結果の assert } }

投稿2021/05/16 14:33

kiino

総合スコア539

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問