В моем проекте у меня проблемы с тестированием модулей. Одна из проблем заключается в том, что просто делать интеграционный тест гораздо быстрее, чтобы писать, а также проверять, что компоненты работают вместе. Единичное тестирование новых "алгоритмов" или так кажется намного проще. Единица тестирования классов обслуживания это просто кажется неправильным и бесполезным.
Я использую mockito для издевательства репозитория данных spring (и, следовательно, доступа к БД). Дело в том, что если я скажу, что издеваемое хранилище вернет объект A на вызов метода getById, он, очевидно, вернет его, и служба вернет его тоже. Да, служба делает некоторые дополнительные вещи, но очень незначительные вещи, такие как нагрузка ленивых коллекций (из спящего режима). Очевидно, что у меня нет ленивых коллекций (прокси) в unit test.
Пример:
@Test
public void testGetById() {
System.out.println("getById");
TestCompound expResult = new TestCompound(id, "Test Compound", "9999-99-9", null, null, null);
TestCompoundRepository mockedRepository = mock(TestCompoundRepository.class);
when(mockedRepository.findOne(id)).thenReturn(expResult);
ReflectionTestUtils.setField(testCompoundService, "testCompoundRepository",
mockedRepository, TestCompoundRepository.class);
TestCompound result = testCompoundService.getById(id);
assertEquals(expResult, result);
}
Ура, остальное удаётся. Какой сюрприз! Не на самом деле нет.
Может кто-нибудь объяснить мне, что я делаю неправильно? Или что точка такого теста? Я имею в виду, я говорю, чтобы вернуть expResult, а затем он возвращается. Вау. Какой сюрприз! Похоже, я тестирую, работает ли mockito, а не моя Служба.
EDIT:
Единственное преимущество, которое я вижу, если некоторые из них были глупые ошибки, происходит, как оставляя ненужную строку там, которая устанавливает возвращаемое значение в null или что-то подобное глупое. Такие случаи были бы пойманы unit test. Тем не менее соотношение "вознаграждение-усилие" кажется плохим?