2017-10-14 13 views
0

Groovyを使い、一般的なコードをきちんとした方法で抽出することに頭を抱えようとしています。私が主張をするために呼び出すことができ、これら2つの非常に似た例で使用することができGroovyの方法書くとどう一般的な方法への抽象化

boolean foundName = groups.any({ [email protected]'name' == expectedResult.name.toString()}) 
Assert.assertTrue(foundName, "name: ${expectedResult.name.toString()}") 

... ... 

boolean foundDisc = groups.any({ [email protected]'disc' == expectedResult.disc.toString()}) 
Assert.assertTrue(foundDisc, "disc: ${expectedResult.disc.toString()}") 

を私は自分の意思を示すために、2行にそれを破りました。期待値を渡すのは簡単ですが、どうすれば他のものを渡すことができますか?

void assertAnyAttributeEquals(??? it ???, String attributeName, String expectedResult) 
+1

あなたの例では、 'foundNumber'を主張するが、私はそれは' foundDisc'べきであると仮定します。 –

答えて

2

属性/フィールド指定子として文字列補間を使用すると便利なテクニックがあります。例:ここでは

def myAssert = { groups, attr, expectedResult -> 
    def found = groups.any({ [email protected]"${attr}" == expectedResult."${attr}".toString() }) 
    assert found 
} 

は完全な作業例です。

class Result { 
    def name 
    def disc 
} 

def xmlStr = ''' 
<doc> 
    <groups name="hello" /> 
    <groups disc="abc" /> 
</doc> 
''' 

def myAssert = { groups, attr, expectedResult -> 
    def found = groups.any({ [email protected]"${attr}" == expectedResult."${attr}".toString() }) 
    assert found 
} 

def xml = new XmlSlurper().parseText(xmlStr) 

myAssert(xml.groups, 'name', new Result('name': 'hello')) 
myAssert(xml.groups, 'disc', new Result('disc': 'abc')) 
関連する問題