Spring Boot之DAO层的单元测试小结

DAO层

dao是data access object的简写,基于Java对象访问数据库中的数据,这是应用中必备的系统模块。

测试注解

  • DataJpaTest
    主要用以测试DAO的业务功能

DAO层的实体定义

实体Bean定义如下:

@Entity
@Data
public class GameEntity {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    @Column
    private String name;

    @Column
    @Temporal(TemporalType.TIMESTAMP)
    private Date createdTime;
}

在这个Bean中定义了id, name和创建时间三个字段。
定义Repository DAO对象:

@Repository
public interface GameRepository extends JpaRepository {
    public GameEntity findByName(String name);
}

在这个Repository中定义了一个方法,用来实现基于name来查询GameEntity实例。

DAO的单元测试

单元测试用例如下:

import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
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.Date;
import java.util.Objects;
import static org.hamcrest.Matchers.greaterThan;

@RunWith(SpringRunner.class)
@DataJpaTest
@Slf4j
public class GameRepositoryTest {
    @Autowired
    private GameRepository gameRepository;

    @Autowired
    private TestEntityManager entityManager;

    @Test
    public void testGame() {
       GameEntity gameEntity = new GameEntity();
       gameEntity.setCreatedTime(new Date());
       gameEntity.setName("zhangsan");

       gameEntity = this.gameRepository.save(gameEntity);

       Assert.assertTrue(Objects.nonNull(gameEntity));
       Assert.assertThat("id is null", 1l, greaterThan(gameEntity.getId()));
    }
}

在上述测试用例中使用了@DataJpaTest用来启动DAO层的单元测试。 正常基于@Autowired引入GameRepository实例。 这里默认提供了TestEntityManager实例,主要用于在测试环节下,引入EntityManager实例,可以用来执行其它的SQL操作。

总结

这里做了一些假定,由于其只有很少的依赖和业务逻辑。在实际业务场景中,业务逻辑以及数据操作会比较复杂,单元测试用例的依赖会比较多。

你可能感兴趣的:(Java技术,服务化与Spring,Cloud,Spring,Boot实战)