Я тестирую метод, который генерирует два разных исключения. Это мой заголовок:JAVA: JUnitTest, метод тестирования, который выбрасывает два исключения
@Test (expected = A8InvalidInputException.class)
public void testGuessCharacter() throws A8InvalidInputException, A8AlreadyGuessedException { ... }
Тело имеет две попытки/уловы блоки (поиск по SO привел к сообщению, что сказал, что, как вы проверить, что исключения выбрасываются), один для каждого исключения , Мне кажется, я должен разбить это на два метода тестирования, особенно потому, что у меня есть только один ожидаемый атрибут. Однако, когда я это делаю, метод, который должен тестировать A8InvalidInputException, требует try/catch для A8AlreadyGuessedException, а метод, который должен тестировать A8AlreadyGuessedException, требует try/catch для исключения A8InvalidInputException. Я не уверен, как написать этот тест. Это метод, который я пытаюсь проверить:
/**
* 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);
}
}
Метод слишком длинный в любом случае. –
Дейв, мой инструктор предоставил его. Я этого не писал.Помимо этого, я думал, что 30 строк были принятыми в отрасли макс в соответствии с руководством по кодированию Java/руководством по стилю. – speedracer
«Принимаемые в промышленности макс?» Никогда не слышал об этом. Что еще более важно, он имеет достаточно высокую циклическую сложность, чтобы заставить меня дергаться: условные выражения слишком глубоко вложены, чтобы позволить удобные рассуждения, и есть вложенные, где ни один не требуется. Дублированная логика, потому что есть символ, когда все остальное ожидает строку. Простое выравнивание (примерно https://gist.github.com/davelnewton/258761cbf3143da4288c) решает эту проблему. Правильный рефакторинг делает тестирование настолько тривиальным, что почти смешно. –