2015-01-22 3 views
0

나는 SoapUI를 사용하여 WCF 서비스를 테스트하고 있습니다. 내가하는 XPath 일치 선언이있는 주장이 : 소스 XML에 대한SoapUI : 0으로 'false'를 캐스팅하는 방법

if (boolean(//a:IsClick/text()[1])) then //a:IsClick else '' 

을, 노드는

<a:IsClick>false</a:IsClick> 

가 그렇게 선언 섹션은 '거짓'으로 동일시이다. 이다

${#ResponseAsXml#(//CLICK[text()],'')} 

및 (A JDBC 테스트 단계에서)이 XML :

예상 상자이있다

<CLICK>0</CLICK> 

너무 기대 값이 0

내가 필요 내 두 주장이 합쳐 지도록이 둘을 같게하십시오. 이를 수행하는 한 가지 방법은 Expected 결과를 0에서 'false'로 변환하는 것입니다. 어떻게해야합니까? 아니면 더 나은 방법이 있습니까?

+1

을 downvoted을 ... 왜? – Dewey

답변

1

노드가-설정 :

그래서 귀하의 경우, 당신은 뭔가를 할 필요가있을 것이다. 숫자를 부울로 변환하려는 경우 boolean(0)은 false를 반환하고 나머지 숫자 인 boolean(n)은 true를 반환합니다. 반면에 boolean()의 문자열은 boolean('false')에 대해 false를 반환하고 나머지 문자열에 대해서는 boolean('') (빈 문자열)에 대해 false를 반환합니다. boolean()이 true를 반환합니다. 따라서 문제는 text()을 사용하면 '0'이 숫자 대신 문자열로 표시되므로 boolean('0')을 캐스팅하려고하면 사실이됩니다. 귀하의 경우에는

당신이 당신의 JDBC Test Step 같은 일부 XML 결과 한 경우 :

<Results> 
    <CLICK>0</CLICK> 
</Results> 

당신은 거짓 표현식에 boolean()를 추가하고 또한 text() 대신 number() 기능을 사용하여이 0을 변환 할 수 있습니다. 그래서 잘못된 사용에 0을 캐스팅 : 대신

${#ResponseAsXml#(boolean(//CLICK[number()]))}

:이 도움이

${#ResponseAsXml#(//CLICK[text()],'')}

희망,

+0

고마워요 ... 정확히 내가 무엇을 찾고 있었습니까! – Dewey

+0

@Dewey 당신을 환영합니다':)'! – albciff

0

가장 간단한 해결책은이를 Groovy 문제 - Groovy 어설 션으로 변환하는 것입니다. 여기

은 ( documentation 참조) 시각화 : 당신이 정수에 부울을 비교할 수 없기 때문에

def negIsClick = "false" 
def negCLICK = "0" 

def posIsClick = "true" 
def posCLICK = "1" 

// fake "cast" the text to boolean 
assert !(negIsClick.equals("true") ?: false) 
assert (posIsClick.equals("true") ?: false) 

assert !negCLICK.toInteger() // zero is false 
assert posCLICK.toInteger() // all other numbers are true 

// note the exclamations everywhere 
assert !(negIsClick.equals("true") ?: false) == !negCLICK.toInteger() 
assert !(posIsClick.equals("true") ?: false) == !posCLICK.toInteger() 
// this fails 
assert (negIsClick.equals("true") ?: false) == negCLICK.toInteger() 

마지막 하나는 실패합니다. 그러나 그 전에는 !이 모든 것을 불린으로 변환합니다.

boolean() 함수는 숫자, 문자열, 또는에 대한 부울 반환의 XPath에서
// read in the two values 
def IsClick = context.expand('${XML test step#Response//*:IsClick}') 
def CLICK = context.expand('${JDBC test step#ResponseAsXml//*:CLICK}') 
// now compare them 
assert !(IsClick.equals("true") ?: false) == !CLICK.toInteger() 
0
assert '1'.toInteger().asBoolean() 
assert !'0'.toInteger().asBoolean() 
관련 문제