Модульный тест для репозитория в приложении с весенней загрузкой - PullRequest
0 голосов
/ 18 июня 2019

Я немного запутался с UnitTest и интеграционным тестом Я знаю, что приведенный ниже код является интеграционным тестом

@RunWith(SpringRunner.class)
@SpringBootTest(classes = LavaMasterApplication.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class CurrencyServiceImplTest {

    @Autowired
    private CurrencyService currencyService;

    static CurrencyDTO currencyDTO = new CurrencyDTO();

    @BeforeClass
    public static void setUp() {
        currencyDTO.setCode("INR");
        currencyDTO.setName("Indian Rupee");
        currencyDTO.setNumber(12);
    }

    @Test
    public void testA_addCurrency() {
        CurrencyDTO dto = currencyService.addCurrency(currencyDTO);
        assertThat(dto).isEqualTo(currencyDTO);
    }
}

Как написать пример модульного теста для того же подхода, что и для хранилища или службы. Я попытался с приведенным ниже фрагментом кода, который не работает.

@RunWith(MockitoJUnitRunner.class)
public class CurrencyServiceImplUT {

    @Mock
    CurrencyRepository repository;

    @Test
    public void testA_addCurrency() {
        Currency currency = new Currency();
        currency.setCode("IND");
        currency.setName("INDIA");
        currency.setNumber(1);
//        CurrencyRepository currencyRepository = mock(CurrencyRepository.class);
        when(repository.save(currency)).thenReturn(currency);
        List<Currency> all = repository.findAll();
        when(repository.findAll()).thenReturn(null);

    }
}

Вышеупомянутый код не работает, он возвращает ноль после сохранения сущности, а findAll () также ноль.

Мне нужно написать тестовый блок для репозитория и сервисов

1 Ответ

0 голосов
/ 02 июля 2019

Я не знаю, что делает CurrencyService и что вы пытались сделать на примере модульного теста, который вы нам показываете, но эквивалентный модульный тест интеграционного теста будет выглядеть примерно так:

public class CurrencyServiceTest {

    @Mock
    CurrencyRepository repository; // mock the repository

    @InjectMocks
    CurrencyService service; // use the real implementation and inject the @Mock's on it

    @Test
    public void testA_addCurrency() {

        Currency currency = new Currency();
        currency.setCode("IND");
        currency.setName("INDIA");
        currency.setNumber(1);

        when(repository.save(currency)).thenReturn(currency); //mocking the repository return

        CurrencyDTO currencyDTO = new CurrencyDTO();
        currencyDTO.setCode("INR");
        currencyDTO.setName("Indian Rupee");
        currencyDTO.setNumber(12);

        CurrencyDTO dto = currencyService.addCurrency(currencyDTO);
        assertThat(dto).isEqualTo(currencyDTO);

    }
}

Как я уже сказал, я не могу сказать, имеет ли смысл этот тест для вас, но ваш модульный тест должен соответствовать этому виду кода.

...