Вопрос интеграционного тестирования при вставке в базу данных - PullRequest
0 голосов
/ 27 июня 2019

Я очень плохо знаком с тестированием и сейчас играю с интеграционным тестированием.

Я пишу этот фрагмент кода, чтобы вставить новую запись в базу данных и проверить массивы до и после. Но по какой-то причине кажется, что он возвращает 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());
}
}

Это мой TestRunner:

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 () отдельно от основной функции, просто чтобы проверить, работает ли вставка и работает ли она. Я сравнил размер массивов, и он работает также, когда я бегу из основного метода. Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 27 июня 2019

Макет не должен обеспечивать вам поведение.Вы должны сделать это самостоятельно.Например:

questionDaoMock = Mockito.mock(QuestionDAO.class); 
Mockito.when(questionDaoMock.findAll()).thenReturn(Collections.emptyList());

Теперь, когда ваш код вызывает метод questionDaoMock.findAll() - Mockito возвращает пустой список для вас.

Я думаю, вам нужно использовать реальный экземпляр QuestionDAO для этого теста.

1 голос
/ 27 июня 2019

В методе установки должна быть аннотация @Before, иначе Junit не будет запускать метод setUp () перед выполнением метода testAdd ().

0 голосов
/ 27 июня 2019

Похоже, проблема в том, чтобы издеваться над классом Дао. Я делаю это правильно? Фактически он возвращает нулевой массив после метода findAll() (который, я уверен, работает)

...