码迷,mamicode.com
首页 > 编程语言 > 详细

【maven】【spring boot】【单元测试】 使用controller 执行单元测试类

时间:2019-08-08 16:10:02      阅读:396      评论:0      收藏:0      [点我收藏+]

标签:简单   解决办法   rect   cti   webapp   false   map   --   auto   

  存在这样一个场景: 

    当项目启动时间过长,又没办法缩短的时候,写单元测试就是一个十分耗时的工作,

    这工作不在于使用编写代码,而在于每次run junit test 都需要完整启动一次项目,白白浪费宝贵的生命。

    当由于某个字段没有赋值,或者某个简单判断写错,导致需要再等个3-5分钟启动 junit test,是否会想要执行一次san check?  

  于是乎:

    假若能使用controller来调用test类方法的话,那么在本地调试单元测试时,对于一些简单的代码修改,通过热部署,只需要重新进行一次url访问就可执行一个完整的单元测试,

    无需再次启动整个项目。

  正题:

    1. 如何在controller访问src/test ?

    2. 如何编写 ?

 

  如何在controller访问src/test

    maven项目的默认配置中, src/test目录是测试目录,不会被编译到jar中,也就是在controller调用时会报ClassNotFoundException

    解决办法最好的是在pom文件中修改maven默认的测试目录,将src/test 作为正常目录使用

    <build>
     <!-- 将测试目录更改为其他目录 --> <testSourceDirectory>src/main/test</testSourceDirectory> </build>

  需要重新maven-update。update后重新将src/test use for building path

  完成后便可以成功启动项目,并可以正常访问。

 

 

  如何编写

    可以做一个参考:

controller,最主要内容在于使用controller时,junit的自动回滚可能不会生效,所以手动设置事务,手动触发回滚

@RestController
@RequestMapping(value = "/junit", produces = "application/json;charset=utf-8")
public class BcsTestController {
    
    private final Logger logger = LoggerFactory.getLogger(BcsTestController.class);
    
    @Autowired
    private BizTest bizTest;

    @GetMapping("test")
@Transactional(rollbackFor = Exception.class)
public void startJunit() { bizTest.insertTest(); // 手动开启事务回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } }

测试类,即可以通过其他类访问,也可以直接执行junit,增加@Componet 或者@Service 还可以通过spring注入方式调用

@Component
public class BizTest extends AbstractTest {

    @Autowired
    private Biz biz;
    
    @Test
    public void insertTest() {
        // 测试业务
    }
}

测试抽象父类,用于直接使用junit测试时的配置

@RunWith(SpringRunner.class)
@SpringBootTest(classes = JltBcsWebApplication.class)
@Transactional
// @Rollback(false)
public abstract class AbstractTest {

    protected final Logger logger = LoggerFactory.getLogger(AbstractTest.class);

    protected void println(Object object) {
        System.out.println(object);
    }
}

 

【maven】【spring boot】【单元测试】 使用controller 执行单元测试类

标签:简单   解决办法   rect   cti   webapp   false   map   --   auto   

原文地址:https://www.cnblogs.com/syui-terra/p/11321719.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!