对于在jUnit测试中抛出异常的方法,您如何处理?如您所见,addAnswer
类中的Question
方法可能会抛出异常。在shouldFailifTwoAnswerAreCorrect
方法中,我想检查是否抛出了异常但是在shouldAddAnswersToQuestion
我应该从私有MultipleAnswersAreCorrectException
方法中添加thr addAnswerToQuestion
并在shouldAddAnswersToQuestion
中尝试/ catch还是在该方法中抛出它?
当方法在测试中抛出异常时你会怎么做?
public class QuestionTest {
private Question question;
@Before
public void setUp() throws Exception {
question = new Question("How many wheels are there on a car?", "car.png");
}
@Test
public void shouldAddAnswersToQuestion() {
addAnswerToQuestion(new Answer("It is 3", false));
addAnswerToQuestion(new Answer("It is 4", true));
addAnswerToQuestion(new Answer("It is 5", false));
addAnswerToQuestion(new Answer("It is 6", false));
assertEquals(4, question.getAnswers().size());
}
@Test(expected = MultipleAnswersAreCorrectException.class)
public void shouldFailIfTwoAnswersAreCorrect() {
addAnswerToQuestion(new Answer("It is 3", false));
addAnswerToQuestion(new Answer("It is 4", true));
addAnswerToQuestion(new Answer("It is 5", true));
addAnswerToQuestion(new Answer("It is 6", false));
}
private void addAnswerToQuestion(Answer answer) {
question.addAnswer(answer);
}
}
问题类中的方法
public void addAnswer(Answer answer) throws MultipleAnswersAreCorrectException {
boolean correctAnswerAdded = false;
for (Answer element : answers) {
if (element.getCorrect()) {
correctAnswerAdded = true;
}
}
if (correctAnswerAdded) {
throw new MultipleAnswersAreCorrectException();
} else {
answers.add(answer);
}
}
答案 0 :(得分:7)
您必须向throws
添加addAnswerToQuestion
声明,然后尝试/捕获异常或使用expected
属性或@Test
:
@Test(expected=IOException.class)
public void test() {
// test that should throw IOException to succeed.
}
答案 1 :(得分:0)
在shouldAddAnswersToQuestion
测试中,如果您不期望MultipleAnswersAreCorrectException
,则可以在try / catch中包围该块并写入断言失败条件,例如。
@Test
public void shouldAddAnswersToQuestion() {
try{
addAnswerToQuestion(new Answer("It is 3", false));
addAnswerToQuestion(new Answer("It is 4", true));
addAnswerToQuestion(new Answer("It is 5", false));
addAnswerToQuestion(new Answer("It is 6", false));
assertEquals(4, question.getAnswers().size());
}catch(MultipleAnswersAreCorrectException e){
Assert.assertFail("Some self explainable failure statement");
}
}
我认为最好让测试失败,而不是从测试中抛出异常,因为所有测试都应该因assertin失败而失败,而不是因为异常。