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

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

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

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

Java

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

Q&A

2回答

7645閲覧

JUnitテストについて質問です

fnglsh_mae

総合スコア10

JUnit

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

Java

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

0グッド

0クリップ

投稿2015/09/26 13:02

今、以下のクラスについてのJUnitテストを書こうとしているのですが、どういう風にテストメソッドを設定すればよいか分かりません。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Age {

public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("年齢を教えてください"); int x; x = Integer.parseInt(br.readLine()); if (x>=20) System.out.println("成人ですね。"); else System.out.println("未成年ですね。");

}
}

元々テストメソッドの書き方がいまいち理解できていないので、どなたかご教授願えますでしょうか?
初歩的な質問で申し訳ありません。

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

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

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

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

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

guest

回答2

0

Age.java と AgeTest.java を以下に示します。
また、 eclipse で emma プラグインをつかってカバレージもとりながらテストを実行したときのスクリーンショットも示します。

参考情報として以下を参照してください。

イメージ説明

Age.java

java

1 2import java.io.BufferedReader; 3import java.io.IOException; 4import java.io.InputStreamReader; 5 6public class Age { 7 8 public static void main(String[] args) throws IOException { 9 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 10 System.out.println("年齢を教えてください"); 11 int x = Integer.parseInt(br.readLine()); 12 13 if (x >= 20) { 14 System.out.println("成人ですね。"); 15 } else { 16 System.out.println("未成年ですね。"); 17 } 18 } 19}

AgeTest.java

java

1 2import static org.junit.Assert.assertEquals; 3 4import java.io.ByteArrayOutputStream; 5import java.io.IOException; 6import java.io.PrintStream; 7 8import org.junit.After; 9import org.junit.Before; 10import org.junit.Test; 11 12public class AgeTest { 13 private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); 14 private final ByteArrayOutputStream errContent = new ByteArrayOutputStream(); 15 private final StandardInputSnatcher in = new StandardInputSnatcher(); 16 17 @Before 18 public void setUpStreams() { 19 System.setOut(new PrintStream(outContent)); 20 System.setErr(new PrintStream(errContent)); 21 System.setIn(in); 22 } 23 24 @After 25 public void cleanUpStreams() { 26 System.setOut(System.out); 27 System.setErr(System.err); 28 System.setIn(System.in); 29 } 30 31 @Test 32 public void testAdult() throws IOException { 33 String[] args = {}; 34 in.inputln("21"); 35 Age.main(args); 36 assertEquals("21歳は成人", "年齢を教えてください\n成人ですね。\n", outContent.toString()); 37 } 38 39 @Test 40 public void testChild() throws IOException { 41 String[] args = {}; 42 in.inputln("19"); 43 Age.main(args); 44 // System.out.print("hello"); 45 assertEquals("19歳は未成年", "年齢を教えてください\n未成年ですね。\n", outContent.toString()); 46 } 47 48 @Test 49 public void test20() throws IOException { 50 String[] args = {}; 51 in.inputln("20"); 52 Age.main(args); 53 // System.out.print("hello"); 54 assertEquals("20歳は成人", "年齢を教えてください\n成人ですね。\n", outContent.toString()); 55 } 56}

StandardInputSnatcher.java

java

1import java.io.IOException; 2import java.io.InputStream; 3 4// See http://qiita.com/Takmiy/items/ea234d2211aba66e7659 5// > JUnitで標準入力をつっこんで流す 6 7/** 8 * 標準入力に対し、文字列入力を行う 9 */ 10public class StandardInputSnatcher extends InputStream { 11 12 private StringBuilder buffer = new StringBuilder(); 13 private static String crlf = System.getProperty("line.separator"); 14 15 /** 16 * 文字列を入力する。改行は自動的に行う。 17 * 18 * @param str 入力文字列 19 */ 20 public void inputln(String str) { 21 buffer.append(str).append(crlf); 22 } 23 24 @Override 25 public int read() throws IOException { 26 if (buffer.length() == 0) { 27 return -1; 28 } 29 int result = buffer.charAt(0); 30 buffer.deleteCharAt(0); 31 return result; 32 } 33}

投稿2015/09/27 00:31

katoy

総合スコア22324

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

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

0

JUnitは一般的にホワイトボックステストに使います。実装時に「この時はこの処理を行なう」、「この処理を行うと変数はこうなる」等を考えなら実装すると思います。これをそのままテストメソッドにすればいいと思います。簡単に言えば下記の観点でテストを作ればいいでしょう。
・引数Aを渡すと値Bを返却する。
・Aメソッドを呼ぶと変数Bの値が変更される

テスト1
xが0以外である
テスト2
xが20以上の時にコンソールに「成人ですね。」が表示される。
テスト3
xが20未満の時にコンソールに「未成年ですね。」が表示される。

投稿2015/09/26 13:53

yona

総合スコア18155

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

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

fnglsh_mae

2015/09/26 14:00

ご回答ありがとうございます。 追加で申し訳ないのですが、 テスト2、テスト3の時のコンソール表示は具体的にどのようなコードで書けばいいと思われますか? 余裕がございましたら、お答えして頂けると幸いです。
yona

2015/09/26 14:54

少しは調べたでしょうか? 下記に解決済みの質問を貼ります。 https://teratail.com/questions/3694 正しいかは自身で調査をお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問