스프링 부트에서는 이 기능을 너무나도 간단하게 만들어놓아서,
전혀 부담없이 아래 예제를 따라할 수 있을 것이라 확신한다.
jpa junit test를 위해서는 아래와 같이 간단히 @DataJpaTest 를 선언하고,
spring boot에서 제공하는 TestEntityManager를 사용하여, test data를 생성할 수 있다.
그 후, 실제 개발자가 만든 method를 실행시켜 기대하는 값이 나오는지 확인하면 끝~!!
package org.blog.test.jpatest.repository; import org.blog.test.jpatest.entity.TestTable; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager; import org.springframework.test.context.junit4.SpringRunner; import java.util.List; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @RunWith(SpringRunner.class) @DataJpaTest public class TestTableRepositoryTest { @Autowired private TestEntityManager testEntityManager; @Autowired private TestTableRepository testRepository; @Test public void findByName() { //Given TestTable testTable = new TestTable("test"); this.testEntityManager.persist(testTable); //When Listresult = testRepository.findByName("test"); //Then assertThat(result.get(0), is(testTable)); } }
아래에서 작성한 test case가 통과한 것을 확인할 수 있다.
- 실행 결과
Hibernate: insert into test_table (id, name) values (null, ?) 2017-05-30 23:28:50.605 INFO 11808 --- [ main] o.h.h.i.QueryTranslatorFactoryInitiator : HHH000397: Using ASTQueryTranslatorFactory Hibernate: select testtable0_.id as id1_0_, testtable0_.name as name2_0_ from test_table testtable0_ where testtable0_.name=? 2017-05-30 23:28:50.903 INFO 11808 --- [ main] o.s.t.c.transaction.TransactionContext : Rolled back transaction for test context [DefaultTestContext@2ed0fbae testClass = TestTableRepositoryTest, testInstance = org.blog.test.jpatest.repository.TestTableRepositoryTest@780cb77, testMethod = findByName@TestTableRepositoryTest, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@212bf671 testClass = TestTableRepositoryTest, locations = '{}', classes = '{class org.blog.test.JpaTestApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.ImportsContextCustomizer@82b1d917, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@1f36e637, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@68bbe345, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@1e88b3c, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@88c04a62], contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]]].
전체 예제는 아래에서 다운로드 받을 수 있다.
https://gitlab.com/shashaka/jpa-test-project
댓글 없음 :
댓글 쓰기