2013-10-15 2 views
3

이 json이 통화에 대한 올바른 데이터와 함께 제공되는지 확인하는 간단한 안심 테스트가 있습니다. 나는 안심할 수있는 1.8을 사용하고 있으며 2 가지 다른 버전의 ASM으로 알려진 문제점으로 인해 그루비 항아리를 그루비 항아리로 교체했습니다. 내 json으로 (가) 돌아 오면테스트 실패시 안전 보장 예외

은 다음과 같습니다

{"account":"12345"} 

내 코드는 다음과 같습니다

package com.blah.tests; 

import org.junit.Test; 
import static com.jayway.restassured.RestAssured.given; 
import static org.hamcrest.Matchers.equalTo; 

public class AccountsTest { 

public AccountsTest() { 
} 


@Test 
public void getLocationAccount() { 

      given(). 
       param("thingAccountIsfor","ABCD"). 
      expect(). 
       statusCode(200). 
       body("account",equalTo("10")). 
      when(). 
       get("http://machine:2343/rest/accounts/getaccount"); 

    } 

} 

나는 이것이 내가 그것을 잘 작동 계정에 대한 기대 값과 일치하는 실행

. 일치하지 않는 값을 넣으면 스택 추적을 얻습니다.

log4j:WARN No appenders could be found for logger (org.apache.http.impl.conn.SingleClientConnManager). 
log4j:WARN Please initialize the log4j system properly. 

java.lang.AssertionError: 1 expectation failed. 
JSON path account doesn't match. 
Expected: 10 
    Actual: 12345 

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:77) 
    at org.codehaus.groovy.reflection.CachedConstructor.doConstructorInvoke(CachedConstructor.java:71) 
    at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrap.callConstructor(ConstructorSite.java:81) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:57) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:182) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:190) 
    at com.jayway.restassured.internal.ResponseSpecificationImpl$HamcrestAssertionClosure.validate(ResponseSpecificationImpl.groovy:399) 
    at com.jayway.restassured.internal.ResponseSpecificationImpl$HamcrestAssertionClosure$validate.call(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) 
    at com.jayway.restassured.internal.RequestSpecificationImpl.invokeFilterChain(RequestSpecificationImpl.groovy:759) 
    at com.jayway.restassured.internal.RequestSpecificationImpl$invokeFilterChain.callCurrent(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) 
    at com.jayway.restassured.internal.RequestSpecificationImpl.applyPathParamsAndSendRequest(RequestSpecificationImpl.groovy:1142) 
    at com.jayway.restassured.internal.RequestSpecificationImpl.this$2$applyPathParamsAndSendRequest(RequestSpecificationImpl.groovy) 
    at com.jayway.restassured.internal.RequestSpecificationImpl$this$2$applyPathParamsAndSendRequest.callCurrent(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) 
    at com.jayway.restassured.internal.RequestSpecificationImpl.get(RequestSpecificationImpl.groovy:131) 
    at com.jayway.restassured.specification.RequestSender$get.call(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120) 
    at com.jayway.restassured.internal.ResponseSpecificationImpl.get(ResponseSpecificationImpl.groovy:226) 
    at com.tim.tests.AccountsTest.getLocationAccount(AccountsTest.java:17) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:157) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 


Process finished with exit code 255 

Intellij 내부에서 실행 중입니다. 나는 그루비 한 항아리를 옮기려고 노력했다. 충돌하는 ASM 버전을 내 수업 경로에서 벗어나 다시 실행했다. 나는 똑같은 결과를 얻었으므로 이것은 안심할 수있는 1.8과 함께 제공되는 그루비 한 항아리 대신 그루비 같은 항아리를 사용하는 것과 관련이 있다는 것을 믿지 않는다.

테스트에 실패하거나 여기에 문제가있을 때마다 예외가 발생합니까?

답변

3

예, AssertionException을 던지면 실패합니다. 이 문제를 피하는 데는 두 가지 방법이 있습니다. AssertionError을 사용하여 예외를 찾아냅니다.

  1. expect().statusCode().body() 부분을 제거하고 응답 개체에 응답을 할당하고 아래와 같이 JsonPath 개체를 사용하여 구문 분석하여 원하는 테스트를 계속하십시오.

    Response res = given(). 
        param("thingAccountIsfor","ABCD").  
        when(). 
        get("http://machine:2343/rest/accounts/getaccount"); 
    JsonPath jp = new JsonPath(res.asString()); 
    String account = jp.get("account").toString();