zoukankan      html  css  js  c++  java
  • 编写一个JPA测试用例

    整合了JPA和mysql需要来测试一下是否可以成功对数据库进行操作,这里写一个简单的单元测试来对之前配置的正确性进行验证。


    依赖导入

    首先导入需要的SpringTest包和Junit单元测试包。

            <!-- spring-boot-starter-test依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!-- junit依赖 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>

    测试代码

    使用如下代码进行测试。
    - @SpringBootTest(classes = {Application.class}),使用这个注解并将参数设置为SpringBoot启动类,作用是通过SpringBoot来扫描Bean,以实现自动装配。在1.4之前的版本使用注解@SpringApplicationConfigration
    - 使用@Rollback来设置回滚,如果在测试环境,value设为false可以看到事物提交后的数据库。默认为true。在Spring4.2之前使用注解@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)来设置回滚。

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(classes = {Application.class})
    @Rollback(value = true)
    @Transactional(transactionManager = "transactionManager")
    public class MysqlTest {
        private static Logger logger = LoggerFactory.getLogger(MysqlTest.class);
    
        @Autowired
        PlayerRepository playerRepository;
        @Autowired
        TeamRepository teamRepository;
        @Autowired
        PositionRepository positionRepository;
    
        @Before
        public void initData(){
            playerRepository.deleteAll();
            positionRepository.deleteAll();
            teamRepository.deleteAll();
    
            Team team = new Team();
            team.setName("湖人队");
            teamRepository.save(team);
            Assert.assertNotNull(team.getId());
    
            Position position = new Position();
            position.setName("SG");
            positionRepository.save(position);
            Assert.assertNotNull(position.getId());
    
            Player player = new Player();
            player.setName("Kobe Bryant");
            player.setCreatedate(new Date());
            player.setTeam(team);
            List<Position> positions = positionRepository.findAll();
            Assert.assertNotNull(positions);
            player.setPosition(positions);
    
            playerRepository.save(player);
            Assert.assertNotNull(player.getId());
        }
    
        @Test
        public void findPage(){
            Pageable pageable = new PageRequest(0, 10, new Sort(Sort.Direction.ASC, "id"));
            Page<Player> page = playerRepository.findAll(pageable);
            Assert.assertNotNull(page);
    
            for(Player player: page.getContent()){
                logger.info("
    ========player======== player name:{}, team name:{}, position name:{}
    ",
                        player.getName(), player.getTeam().getName(), player.getPositions().get(0).getName());
            }
        }
    }
  • 相关阅读:
    'Undefined symbols for architecture i386,clang: error: linker command failed with exit code 1
    The codesign tool requires there only be one 解决办法
    XCode iOS project only shows “My Mac 64bit” but not simulator or device
    Provisioning profile XXXX can't be found 的解决办法
    UIView 中的控件事件穿透 Passthrough 的实现
    Xcode4.5出现时的OC新语法
    xcode 快捷键(持续更新)
    打越狱包
    php缓存与加速分析与汇总
    浏览器的判断
  • 原文地址:https://www.cnblogs.com/enhe/p/12141718.html
Copyright © 2011-2022 走看看