加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大型Grails项目中的集成和单元测试

发布时间:2020-12-14 16:34:36 所属栏目:大数据 来源:网络整理
导读:编写单元测试通常比较复杂,因为在大型Grails项目中必须处理模拟对象而不是集成测试.这个 article甚至表明我们甚至可以完全取消单元测试,只写集成测试,我倾向于同意. 我看到的唯一的缺点是与同一单元测试相比,集成测试的执行速度. 从您在大型Grails项目中的实
编写单元测试通常比较复杂,因为在大型Grails项目中必须处理模拟对象而不是集成测试.这个 article甚至表明我们甚至可以完全取消单元测试,只写集成测试,我倾向于同意.

我看到的唯一的缺点是与同一单元测试相比,集成测试的执行速度.

从您在大型Grails项目中的实际经验,您对此有何想法?

如果我们编写测试完全相同方法的单元测试,并且还编写也测试完全相同方法的集成测试,这是编写测试的正常方式吗?

在实际的大型Grails项目中,单元测试与集成测试的比例是什么?

您是否成功完成了一个大型的Grails项目,而无需进行任何测试?

解决方法

如果可能,我总是把测试写成单元测试.我这样做是因为:

>单元测试执行得更快
>我更喜欢隔离测试每个组件,而不是测试集成在一起的所有组件,因为这样可以更容易地识别错误的源
>单元测试环境更简单(例如没有Spring应用程序环境),因此与正在执行的测试无关的潜在的故障源数量较少

我将编写一个集成测试的例子是,如果我想测试一下我在resources.groovy中定义的一个Spring bean.虽然我可以实例化该类并直接测试它,然后我的测试需要知道该bean的当前实现类(可能会改变).

长期来看,我认为编写集成测试实际上更为复杂,因为随着时间的推移维护它们的成本要高于单元测试. Groovy / Grails对于嘲笑/扼杀有很好的支持,所以在单元测试中嘲笑依赖的成本相对较低.这是一个真实世界的例子,我的一个单元测试我在哪里:

>模拟通常只能在集成测试中使用的MessageSource Spring bean
>模拟两个命令类,以便我可以调用validate()方法,检查.errors属性等.

class MyUnitTests extends GrailsUnitTestCase {

    MessageSource messageSource

    protected void setUp() {

        super.setUp()
        // mockForConstraintsTests is a method provided by GrailsUnitTestCase
        [Complex,CategoryCommand].each {mockForConstraintsTests(it)}

        // 'mockMessage' will be returned by every method call on messageSource
        messageSource = {Object[] args -> "mockMessage"} as MessageSource
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读