我是测试的新手,我现在正在使用集成测试。
我正在编写此代码,以在数据库中插入一个新条目,并在数组之前和之后测试。但是由于某种原因,它似乎返回false,我不确定我是否正在做正确的事情:
这是Junit类:
public class TestJunit {
private Question question;
private QuestionDAO questionDaoMock;
protected void setUp(){
question = new Question();
questionDaoMock = mock(QuestionDAO.class);
question.setQuestiondao(questionDaoMock);
}
@Test
public void testAdd() {
questionDaoMock.openCurrentSessionwithTransaction();
List<Question> currentQuestions = new ArrayList<Question>();
currentQuestions = questionDaoMock.findAll();
question.setChapterId(64);
question.setText("Rezultatul calculului 54*2-76:2 este...");
questionDaoMock.persist(question);
currentQuestions.add(question);
List<Question> newQuestions = new ArrayList<Question>();
newQuestions = questionDaoMock.findAll();
questionDaoMock.closeCurrentSessionwithTransaction();
assertEquals(currentQuestions.size(), newQuestions.size());
}
}
这是我的测试人员:
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
我已经在主函数中分别尝试了Testadd((函数中的代码,只是检查插入是否有效并且可以。我比较了数组尺寸,当我从主方法运行时,它也可以工作。我在做什么错?
设置方法中应该有一个@before注释,else junit不会在执行testadd((方法之前运行setup((方法。
模拟不应为您提供行为。您需要自己做。例如:
questionDaoMock = Mockito.mock(QuestionDAO.class);
Mockito.when(questionDaoMock.findAll()).thenReturn(Collections.emptyList());
现在,当您的代码调用方法questionDaoMock.findAll()
-Mockito返回为您返回空列表。
我认为您需要在此测试中使用Questiondao的真实实例。
问题似乎是嘲笑DAO类。我在做对吗?它实际上是在findAll()
方法之后返回一个空数组(我确定它可以工作(