Вы должны проверить реализацию, следовательно, класс.
Интерфейс следует использовать только для инъекций.Итак, взглянув на код, который вы разместили, вы должны проверить класс AccountServiceImpl
в классе AccountServiceImplTest
(или что-то подобное).
В этом модульном тесте вы должны высмеивать AccountRepository
, OperationRepository
и OperationConverter
.В тестовом модуле вы должны тестировать только тот класс, который заинтересован в тестировании, а не его зависимости.Итак, вы вводите интерфейсы, используя @Autowired
.Таким образом, используя фиктивный фреймворк, вы можете смоделировать ваши классовые зависимости, изолируя модуль, который вам нужен тест.
Посмотрите на класс, который вы опубликовали: вы вводите три компонента с помощью аннотации.Я уверен, что все эти типы интерфейсов.При развертывании приложения Spring CDI позаботится о внедрении реальных реализаций сразу после запуска контейнера (или правильного запуска Spring Boot).Когда вы запускаете этот класс, вы хотите изолировать его.Тест должен быть как можно более атомарным.Используя Mockito вместе с правильным бегуном JUnit, вы предоставите ложную реализацию для внедренных bean-компонентов.Используя Mockito API, вы можете сказать, как эта ложная реализация должна отвечать на определенный запрос.Итак, вы берете реализацию AccountServiceImpl
, смоделируете все ее зависимости и затем тестируете только логику, содержащуюся в этом классе.Вы не тестируете интерфейс, потому что интерфейс представляет собой только контракт для вызова сервиса, а не его реализацию.
@RunWith(MockitoJUnitRunner.class)
public class AccountServiceTest {
@Mock
private AccountRepository accountRepository;
@Mock
private OperationRepository operationRepository;
@Mock
OperationConverter operationConverter;
@InjectMocks
private AccountServiceImpl accountService;
@Before
public void setUp() {
/* here goes before-class init logic */
}
@Test
public void testMethod1() {
/* here you test a method*/
}
@Test
public void testMethod2() {
/* here you test another method*/
}
}
Так должен выглядеть ваш тестовый класс.