Существует две стратегии тестирования. Один - это модульное тестирование, то есть убедитесь, что ваш сервис работает. Другое - интеграция/сквозное тестирование, то есть убедитесь, что все играет хорошо вместе.
Вы испытываете материал, который у вас есть, вы интегрируете все, что у вас есть. Это довольно грубый пример, использующий только ваше заявление, плюс некоторые составленные вещи, где я не могу заполнить пробелы.
модульных тестов
Использование Mockito
PersonRepository personRepository = mock(PersonRepository.class);
@TestSubject
PersonService personService = new PersonService():
@Test
public void unitTest() {
personService.setPersonRepository(personRepository);
Person person = new Person(1L);
Person person2 = new Person(1L);
when(personRepository.returnPerson(1L)).thenReturn(person2); //expect a fetch, return a "fetched" person;
personService.deleteFromPerson(person);
verify(personRepository, times(1)).delete(person2); //pretty sure it is verify after call
}
Использование EasyMock ...
@Mock
PersonRepository personRepository; //assuming it is autowired
@TestSubject
PersonService personService = new PersonService():
@Test
public void unitTest() {
Person person = new Person(1L);
Person person2 = new Person(1L);
EasyMock.expect(personRepository.returnPerson(1L)).andReturn(person2); //expect a fetch, return a "fetched" person;
personRepository.delete(person2);
EasyMock.expectLastCall(); //expect a delete for person2 we plan to delete
replayAll();
personService.deleteFromPerson(person);
verifyAll(); //make sure everything was called
}
Да, этот тест выглядит как написано жестко, но это на самом деле все, что вы» в любом случае. Вы хотите, чтобы БД извлекала Person из базы данных с использованием аргумента, поэтому есть два объекта Person
, и вы ожидаете удалить прошедший Person
объект, поэтому вы ожидаете его. Простой метод дает простой тест. В основном вы хотите, чтобы вы взаимодействовали с вашим репозиторием, как вы ожидаете. Репозиторий может быть поврежден или недействителен в реальной реализации, но это не меняет того факта, что ваша служба реализована правильно.
Интеграция Тесты
С другой стороны, если вы хотите сделать интеграционный тест, не используется насмешливый. Вместо этого вам нужно подключить все, как тестовую базу данных и репо. Я оставлю это до вас, потому что нет ссылки на реализацию.
@Test
public void integrationTestForAddAndDelete() {
Person person = createDummyPersonForInsertion(); //static method that creates a test Person for you
Person comparePerson;
//make sure we haven't added the person yet
Assert.assertNull(personService.getPerson(person));
//add the Person
comparePerson = personService.addPerson(person);
Assert.assertNotNull(personService.getPerson(person));
//add a rigorous compare method to make sure contents are the same, i.e. nothing is lost or transmuted incorrectly, ignoring ID if that is autogen
//alternatively, you can create a unit test just for Person
Assert.assertEquals(person, comparePerson);
//remove the Person
personService.deleteFromPerson(person);
Assert.assertNull(personService.getPerson(person));
//test for exception handling when you try to remove a non-existent person;
personService.deleteFromPerson(person);
//test for exception handling when you try to remove null
personService.deleteFromPerson(null);
}
В этом случае вы хотите, чтобы ваше репо фактически обрабатывало все вызовы службы. Вы знаете, что ваша служба работает с модульным тестом, но работает ли репо с сервисом или вы что-то не правильно настроили.
Вы можете проверить это, извлекая объект человека, убедившись, что он успешно извлечен, а затем удалил его и попытался найти снова. Если вы не можете получить его во второй раз, удаление будет успешным. –
* Если невозможно проверить, удаляется ли объект * Если вы пишете единичный тест, то ответственность за тест заключается в том, чтобы вызвать метод 'personRepository.delete', а не то, что он действительно работает. Если вы пишете тест интеграции, вы должны создать «Лицо», проверить его существование, а затем удалить его и проверить его несуществование. – Compass
Также проверьте, что удаление неверного идентификатора или действительного идентификатора дважды выполняется, как вы ожидаете. – walsht