junitで、1つのクラスに2つの@Testのアノテーションをつけたメソッドを書くとNoSuchElementExceptionが出る。
今、しりとりのゲームを作ろうと思い、Javaでプログラミングしています。
Junitに以下のようなテストケースを書いたところ、NoSuchElementExceptionが出てしまいます。
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.junit.Test;
import static org.junit.Assert.*;
public class IOProcessorTest {
@Test
public void testPromptInput() {
String input = "シリトリ 1 しりとり 2 シリトリ 1 シリトリ f 1";
InputStream in = new ByteArrayInputStream(input.getBytes());
System.setIn(in);
assertEquals("シリトリ", IOProcessor.promptInput("テストします。"));
assertEquals("シリトリ", IOProcessor.promptInput("テストします。"));
assertEquals("シリトリ", IOProcessor.promptInput("テストします。"));
}
@Test
public void testConvertToKata() {
assertEquals("シリトリ", IOProcessor.convertToKata("しりとり"));
assertEquals("シリトリ", IOProcessor.convertToKata("シリトリ"));
}
}
テストしているクラスのコードは以下の通りです。
import java.util.Scanner;
import java.lang.StringBuffer;
public class IOProcessor {
static Scanner sc = new Scanner(System.in);
static FormChecker form = new FormChecker();
static AnsChecker ans = new AnsChecker();
public static String promptInput(String msg) {
boolean confirmed = false;
String word = null;
while (!confirmed) {
System.out.println(msg);
word = sc.next();
confirmed = confirmInput(word);
}
return word;
}
private static boolean confirmInput(String word) {
boolean confirmed = true;
boolean validInput = false;
while (!validInput) {
System.out.println("What you hava entered is " + word + ".");
System.out.println("Do you want to continue?");
System.out.println("1. Yes, I want to continue. 2. No, I want to change.");
String input = sc.next();
switch (input) {
case "1":
validInput = true;
break;
case "2":
confirmed = false;
validInput = true;
break;
default:
System.out.println("Enter 1 or 2.");
}
}
return confirmed;
}
public static String convertToKata(String word) {
StringBuffer sb = new StringBuffer(word);
for (int i = 0; i < sb.length(); i++) {
char c = sb.charAt(i);
if (c >= 'ぁ' && c <= 'ん') {
sb.setCharAt(i, (char) (c - 'ぁ' + 'ァ'));
}
}
return sb.toString();
}
}
今、テストに2つメソッドがありますが、testConvertToKataだけをコメントアウトしてから実行すると、例外が出ません。逆に、testPromptInputだけをコメントアウトしてから実行した場合も例外が出ません。2つのメソッドを同時に実行した場合にのみ例外が出るのですがどうしてでしょうか。
プログラミング初心者で、初めてstackoverflowで質問するので分かりにくい点があるかと思いますが、ご教示いただければ幸いです。