2つの異なる例外をスローするメソッドをテストしています。これは私のヘッダーです:
@Test (expected = A8InvalidInputException.class)
public void testGuessCharacter() throws A8InvalidInputException, A8AlreadyGuessedException
{
...
}
本文には、例外ごとに1つずつ、2つのtry / catchブロックがあります(SOで検索すると、例外がスローされることをテストする方法であるという投稿が表示されました)。特に、期待される属性は1つしかないため、これを2つのテスト方法に分割する必要があるように思われます。ただし、これを行うと、A8InvalidInputExceptionをテストすることになっているメソッドはA8AlreadyGuessedExceptionのtry / catchを必要とし、A8AlreadyGuessedExceptionをテストすることになっているメソッドはA8InvalidInputExceptionのtry/catchを必要とします。このテストの書き方がよくわかりません。これは私がテストしようとしている方法です:
/**
* This method returns whether a specified character exists in the keyPhrase field
* @param guess a character being checked for in the keyPhrase field
* @return returns whether a specified character exists in the keyPhrase field
* @throws A8InvalidInputException if a non-valid character is passed as input to this method
* @throws A8AlreadyGuessedException if a valid character which has already been guessed is passed as input to this method
*/
public boolean guessCharacter(char guess) throws A8InvalidInputException, A8AlreadyGuessedException
{
if(isValidCharacter(guess))
{
guess = Character.toLowerCase(guess);
if(guessedCharacters.contains(guess) )
{
throw new A8AlreadyGuessedException("" + guess);
}
else
{
guessedCharacters.add(guess);
if(keyPhrase.contains("" + guess))
return true;
else
{
numberOfGuessesLeft--;
return false;
}
}
}
else
{
throw new A8InvalidInputException("" + guess);
}
}