Groovy高级特性(一)

参考文献: 《The document of Groovy》

1.Map类型的值引用

def key = "name"

map =[key:"david"]

-> assert map.key == "david"

map = [(key):"david"]

-> assert map.name == "david"


2.类的property调用

class MyObject {

    [static] String name

    def getName() {

        "<<<"+name+">>>"

    }

}

obj = new MyObject(name:"david")

->assert obj.name == "<<<david>>>"

如果要直接引用对象属性:

->assert obj.@name == "david"


3.函数指针操作:

def str = "cdw"

def fun = str.&toUpperCase

assert fun() == str.toUpperCase()

注:函数指针并不指向实际地址,而是指向一个method name索引

def doSomething(String str) {println "do String"}

def doSomething(int i) {println "do Integer"}

def fun = this.&doSomething

assert fun("david") == "do String"

assert fun(1) == "do Integer"

4.属性分割符号.*

users = [

new User(name:"david",age:10),

new User(name:"lily",age:12),]

assert users.*name == ["david","lily"]

5.[]运算符重载

class User {

    long id

    String name

     def getAt(int i) {

           switch (i) {

            case 0: return id

            case 1: return name

        }

    }

     def putAt(int i,obj) {...}

}

u = new User(id:100,name:"david")

assert u[0] == 100

assert u[1] == "david"

6.as 运算符:

Integer a = 123

String str = a as String

as操作符需要复写Object的asType方法

def asType(Class clazz) {

    if (clazz == String) {

        return new String(this.toString())

    }

}

没有构造器的对象可以指定为各种的类型

class Callback {
        void callback() {println "call callback!!"}
}

interface IInterfacer {}

callback = new Callback()
i = callback as IInterfacer

assert i instanceof IInterfacer

属性类型转换:

class Person {

    String name

    int age

}

p = ["david",12] as Person

or Person p = ["david",12]


7.()括号运算符

()需要复写call方法

class Obj {

    int call(int x) {

        9+x

    }

}

obj = new Obj()

int n = obj.call(1)

assert n == 10

assert obj(1) == 10

8.如果传入的参数是Map类型可以使用列举的方式

def mapFunc(Map map) {

    map.each {

        println it.key+"->"+it.value

    }

}

mapFunc(name:"david",age:19)

or mapFunc name:"david",age:19

9.class mixin操作

class A {def methodA() {println "call A"}}

class B {def methodB() {println "call B"}}

A.metaClass.mixin  B

def o = new A()

assert o.methodB() == 'call B'

assert !(o instanceof B)

注:o.class实际上市一个Proxy

10.Closure返回值:

通过泛型确定Closure的返回值类型

Closure<Boolean> c = {->false}

 11.科里化闭包参数(给闭包参数指定默认值)

def testCurry = {int age,String name->println "$name is $age"}

左侧赋值:

testCurry.curry(12)

assert testCurry("david") == "david is 12"

右侧赋值:

testCurry.rcurry("lily")

assert testCurry(9) == "david is 9"

索引赋值:

testCurry.ncurry(0,123)

assert testCurry("sanny") == "sanny is 123"










本课程是接口测试的基础+进阶+高阶的实战精品课程。 老师从多角度、多方位基于Demo进行讲解,力求做到认真细致讲好课程的每一要点。 全方位助力学员掌握接口测试的技术要领,快速跃升为接口测试方面的高手。 Demo具备很好的通用性及移植性,可以快速运用于实际接口测试中。 主讲老师为资深高级技术专家。毕业于电子科技大学。先后工作于多家知名外企,知名通信民企,知名IT公司。◇ 具备区块链领域高级测试解决方案设计、专家级测试开发、团队管理培训经验。◇ 具备专家级自动化测试解决方案、自动化测试平台框架设计开发、自动化测试团队管理培训经验。◇ 具备专家级的功能专项测试、性能专项测试经验及丰富的渗透测试经验。◇ 具备丰富的持续集成/持续交付(CI/CD)开发、实施及运维经验。◇ 具备丰富的C#/Java/Delphi/VB/C++/Python/Tcl/Groovy/Shell等开发及脚本开发经验◇ 具备20年的IT互联网工作经验。先后担任过项目经理,测试技术经理,测试总监以及专家级技术顾问等职务。独立开发完成有如下自动化测试框架及平台◇ GUI自动化测试框架(TSL)◇ ATF自动化测试框架(Tcl/Tk)◇ ATP自动化测试平台(C#/Java)◇ SoapUI接口自动化测试框架(Groovy/华为)◇ 持续集成自动化打包框架(Java/华为)◇ 区块链性能测试框架(Python)等。擅长框架/平台设计开发、团队管理、团队技能提升培训,技术瓶颈突破等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值