2014-12-17 5 views
1

나는 JaloSession을 사용하고있는 메소드를 만들었습니다. 나는 이것에 대한 Junit 테스트를 작성하고있다. 내가 다음을 조롱 할 수있는 방법을 알려주십시오.Java에서 Session 객체 모의 방법

ABC abc = JaloSession.getCurrentSession.getAttribute ("abc");

미리 감사드립니다.

+0

, 그것은 도움이 될 수 있습니다 : http://stackoverflow.com/questions/21105403/mocking-static-methods-with-mockito – csrcordeiro

답변

1

정적 호출로 인해 (쉽게) 호출 할 수 없습니다.

따라서 현재 세션을 테스트중인 함수로 전달하거나 현재 세션을 가져올 인터페이스를 정의한 다음이를 객체의 생성자에 전달하십시오. 프로덕션에서는 정적 nmethod를 호출하도록 구현하고 테스트에서는 모방하거나 가짜를 만듭니다.

보너스로 가장 낮은 레벨에서 직접 액세스하지 않고 위에서 의존성이 전달되는보다 명확한 디자인이 보너스로 제공됩니다. 당신이 할 필요가 없습니다 그러나

mockStatic(JaloSession.class); 

expect(JaloSession.getCurrentSession()).andReturn(yourMock); 

...etc 

:

2

는 powermock하면 정적 호출을 조롱 할 수 있습니다. 아마 코드를 제어하기 때문에 가장 쉬운 것은, 보호 방법에 테스트에서 다음

protected ABC getAbc(){ 
    return JaloSession.getCurrentSession.getAttribute("abc"); 
} 

와이 메서드 호출을 래핑 다른 ABC 인스턴스를 반환 getAbc()보다 우선 클래스의 서브 클래스를 만드는 것입니다. 다음과 같이 JMockit 조롱 라이브러리와

@Test 
public void myTest(){ 
    final ABC mockAbc = .... 

    Foo foo = new Foo(){ 
      @Override 
      protected ABC getAbc(){ 
      return mockAbc; 
      } 
    }; 

    //do test on Foo 
} 
1

, 당신이 그것을 조롱 수 있습니다

@Test 
public void mockJaloSession(@Mocked final JaloSession jalo) { 
    final ABC testABC = new ABC(); 
    new Expectations() {{ jalo.getAttribute("abc"); result = testABC; }}; 

    // From code under test: 
    ABC abc = JaloSession.getCurrentSession().getAttribute("abc"); 

    assertSame(testABC, abc); 
} 

(테스트가 자동으로 모의 jalo 객체를 반환으로 getCurrentSession() 호출에 대해 걱정할 필요가 없습니다.) 나는이 주제를 발견