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