Как написать тестовый пример пользовательского метода сохранения интерфейса - PullRequest
0 голосов
/ 12 декабря 2018

При написании jUnit для моего проекта я натолкнулся на мир кода, для которого я понятия не имею, как поступить в jUnit.Ниже приведен код, для которого я пытаюсь написать jUnit.

@Repository
public interface PrescriptionRepository extends CrudRepository<Prescription, 
Integer> {

    @Modifying
    @Transactional
    @Query(value = "insert ignore into prescription (dose_id,med_id) values (:doseId,:medId)", nativeQuery = true)
    public void savePrescription(@Param("doseId") int doseId, @Param("medId") int medId);

    }
}

Спасибо за всю помощь заранее.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Чтобы протестировать поведение сгенерированного класса этого интерфейса в Spring, вам сначала понадобится контейнер Spring.
Затем, если вы хотите написать модульный тест (а не полный интеграционный тест), вам нужно использоватьвстроенная БД (например, H2).
Как правило, вы не хотите загружать весь контейнер пружины, а только часть для компонентов JPA Spring.
Если вы используете Spring Boot, функция тестирования срезов @DataJpaTest будет очень полезным.

Тогда, что касается тестовой части, это довольно просто: в вашем модульном тесте вызовите ваш метод сохранения, а затем используйте метод репозитория для извлечения вставленных данных.
Инаконец утверждают, что вы получите ожидаемый объект.

import org.junit.*;
import org.junit.runner.*;
import org.springframework.boot.test.autoconfigure.orm.jpa.*;

import static org.assertj.core.api.Assertions.*;

@RunWith(SpringRunner.class)
@DataJpaTest
public class PrescriptionRepositoryTest {

    @Autowired
    private TestEntityManager entityManager;

    @Autowired
    private PrescriptionRepository repository;

    @Test
    public void savePrescription() throws Exception { 
        this.repository.savePrescription(...);
        Prescription actualPrescription = em.findById(...); 
        assertThat(actualPrescrition.getDoseId()).isEqualTo("doseId...");
        assertThat(actualPrescrition.getMedId()).isEqualTo("medId...");
    }

}
0 голосов
/ 12 декабря 2018

Вопрос в том, что именно вы хотите проверить?

Предположим, что вы хотите проверить, правильно ли он вставлен в базу данных, и после вызова функции, которую вы хотите проверить, вы должны проверить экземпляр.в базе данных, если она существует или нет.Самый простой способ позвонить

List<Prescription> prescriptions = prescriptionRepository.findAll();

Затем проверьте, есть ли какой-либо

assertTrue(prescriptions.size() == 1);

И затем получите первый элемент этого,и проверяй, что хочешь

Prescription prescription = prescriptions.get(0);

Надеюсь, это поможет!

...