首页 > 解决方案 > 如何编写接口自定义保存方法的测试用例

问题描述

在为我的项目编写 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);

    }
}

感谢您提前提供的所有帮助。

标签: javasqlspringjunitspring-data-jpa

解决方案


要通过 Spring 测试该接口生成的类的行为,首先需要 Spring 容器。
然后,如果您想编写单元测试(而不是完整的集成测试),则需要使用嵌入式 DB(例如 H2)。
通常,您不想加载整个 Spring 容器,而只想加载 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...");
    }

}

推荐阅读