문제

나는 jmock을 처음 접했고 httpsession을 조롱하려고합니다. 나는 얻고있다:

java.lang.assertionerror : 예상치 못한 호출 : httpservletrequest.getsession () 기대치가 지정되지 않았습니까? - 예상의 매개 변수를 지정하려면 조롱 된 방법을 호출합니까?

테스트 방법 :

@테스트

public void testDoAuthorization(){

    final HttpServletRequest request = context.mock(HttpServletRequest.class);
    final HttpSession session = request.getSession();

    context.checking(new Expectations(){{
       one(request).getSession(true); will(returnValue(session));
   }});

    assertTrue(dwnLoadCel.doAuthorization(session));
}

나는 약간의 검색을 수행했으며 이것이 어떻게 이루어 졌는지는 여전히 명확하지 않습니다. 내가 작은 조각을 놓치고있는 것 같은 느낌이 듭니다. 이것에 대한 경험이있는 사람은 나를 올바른 방향으로 가리킬 수 있습니다. 감사해요

도움이 되었습니까?

해결책

요청 객체를 조롱 할 필요가 없습니다. 테스트하는 방법이므로 (dwnLoadCel.doAuthorization())에만 의존합니다 HttpSession 대상, 그것이 당신이 조롱 해야하는 것입니다. 따라서 코드는 다음과 같습니다.

public void testDoAuthorization(){
    final HttpSession session = context.mock(HttpSession.class);

    context.checking(new Expectations(){{
        // ???
    }});

    assertTrue(dwnLoadCel.doAuthorization(session));

}

질문은 : sut이 실제로 무엇을 기대합니까? 하다 세션 개체와 함께? 당신은 당신의 기대에 따라 전화를 표현해야합니다. session 그리고 그로 인한 해당 반환 값 doAuthorization 반환 true.

다른 팁

JMock 컨텍스트에 실제로 전화를 걸기 전에 방법이 몇 번이나 호출 될 것으로 예상 해야하는지 말해야한다고 생각합니다.

final HttpServletRequest request = context.mock(HttpServletRequest.class);

context.checking(new Expectations(){{
  one(request).getSession(true); will(returnValue(session));
}});

final HttpSession session = request.getSession();

나는 Jmock에 매우 익숙하지 않지만 실제로 당신은 당신의 dwnLoadCel 단위 테스트 조롱 된 물체의 특정 방법은 몇 번이나 호출됩니까? 아니면 실제 세션없이 httpsession에 의존하는 수업을 테스트하려고합니까? 그것이 후자라면 Jmock이 당신에게 과잉이라고 생각합니다.

당신은 HttpSession 단위 테스트 만 목적으로 (스터브), 그로부터 테스트를 실행하거나, 당신은 당신은 살펴보아야합니다. dwnLoadCel 그리고 그것을 결정하십시오 진짜 httpsession에 대한 참조가 필요하거나 httpsession 내에서 일부 속성이 필요한 경우. 리팩터 dwnLoadCel 실제로 필요한 것이 무엇인지에만 의존하기 위해 (a Map 또는 세션 객체 내의 특정 매개 변수 값) - 이렇게하면 장치 테스트가 더 쉬워집니다 (서블릿 컨테이너의 종속성은 바이로됩니다).

나는 당신이 당신의 수업에서 이미 어느 정도의 종속성 주입이 이미 테스트되고 있다고 생각하지만, 당신은 너무 광범위한 물체에 의존 할 수 있습니다. Google 테스트 블로그 했다 많이 우수한 조항 최근에 당신은 유용하다고 생각할 수 있습니다 (확실합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top