欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-26 10:29:23
...

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<GameEntity, Long> {
    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操作。

总结

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