Как внедрить сервис в тест Junit - PullRequest
0 голосов
/ 08 октября 2019

Я хотел бы знать о различных возможностях / инструментах для добавления службы в тест JUnit, чтобы я мог использовать его без необходимости получения нового экземпляра (фактически мой сервис является одноэлементным):

public class ServiceTest {

    // Service to inject
    private IMyService someService;

    @Test
    public void methodTest() {
        // test body ...
        assertTrue(someService.someServiceMethod());
    }
}

Ответы [ 2 ]

2 голосов
/ 09 октября 2019

Вы можете использовать внедрение зависимостей для вставки макетов Mockito в Spring Beans для модульного тестирования.

Смотрите это: https://www.baeldung.com/injecting-mocks-in-spring и https://www.baeldung.com/java-spring-mockito-mock-mockbean

@ActiveProfiles("test")
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MocksApplication.class)
public class UserServiceTest {

    @Autowired
    private UserService userService;

    @Autowired
    private NameService nameService;

    @Test
    public void whenUserIdIsProvided_thenRetrievedNameIsCorrect() {
        Mockito.when(nameService.getUserName("SomeId")).thenReturn("Mock user name");
        String testName = userService.getUserName("SomeId");
        Assert.assertEquals("Mock user name", testName);
    }
}
2 голосов
/ 08 октября 2019

Вы можете использовать набор инструментов JMockit . JMockit - это Java-инфраструктура для проверки объектов в тестах (JUnit / TestNG)

См. Пример ниже

@RunWith(JMockit.class)
public class ServiceTest {

    @Tested
    private Service myService;

    @Injectable
    private AnotherService mockAnotherService;

    @Test
    public void methodTest() {
        new Expectations() {{
           mockAnotherService.someMethod("someValue"); result = true;
       }};

        assertTrue(myService.someMethod());
    }
}

Служба, подлежащая проверке, должна быть аннотирована @Tested. Если проверяемая служба вызывает другие службы, они должны быть помечены @Injectable (mocks)

. В приведенном выше примере myService.someMethod вызывает AnotherService.someMethod и передает String someValue. JMockit запускает код метода myService и, когда он достигает вызова mockAnotherService, делает этот вызов возвращающим true

mockAnotherService.someMethod("someValue"); result = true;

Прочтите документацию JMockit для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...