UT 및 PowerMock

4042 단어
PowerMock 소개
테스트하는 방법은 많은 외부 의존 대상 (getConnection, getadmin 연결) 을 인용합니다. 외부 대상은 제어할 수 없습니다. 시뮬레이션 (mock) 외부 대상은 제어할 수 있습니다.
핵심 사상
네가 mock을 원하는 방법은 반드시 네가 mock의 대상조여야 한다.원래의 대상은 원래의 논리로만 갈 뿐이다.
주석이 필요한 경우:
@RunWith(PowerMockRunner.class)
@PrepareForTest ( { YourClassWithEgStaticMethod.class })
  • PowerMockito.whenNew 방법에서 @PrepareForTest에 적힌 클래스는 mock이 필요한 new 대상 코드가 있는 클래스입니다
  • 일반 대상의finil방법, 주석에filal방법이 있는 클래스
  • 일반 대상의static방법, 주석에static방법이 있는 클래스
  • PowerMockito.mockStatic(ClassDependency.class);
    PowerMockito.when(ClassDependency.isExist()).thenReturn(true);
    
  • private 방법, 주해에서private 방법이 있는 클래스
  • PowerMockito.when(other.pub(Mockito.anyString())).thenCallRealMethod();
    PowerMockito.when(other, "pri", Mockito.anyString()).thenReturn(" $$ I am handsome %% private.");
    
  • 시스템 클래스의 정적과final 방법, 주석에 적힌 클래스는 시스템 방법을 호출해야 하는 클래스
  • 기타
  • Void 방법은 주석을 달지 않아도 된다.but:
  • PowerMockito.doNothing().when(mockUnder.dovoid(Mockito.anyString()));   //WRONG
    PowerMockito.doNothing().when(mockUnder).dovoid(Mockito.anyString());   //RIGHT
    PowerMockito.doNothing().when(mockUnder,"dovoid","aa","bb");   //RIGHT
    PowerMockito.when(mockUnder,"dovoid","aa","bb").thenAnswer(answer);   //RIGHT
    

    사용 범위가 넓기 때문에 아래의 작법을 추천합니다
    PowerMockito.doNothing().when(mockUnder,"dovoid","aa","bb");
    PowerMockito.doNothing().when(UnderTest.class,"dovoid","aa","bb");
    PowerMockito.when(mockUnder,"dovoid","aa","bb").thenAnswer(answer);
    PowerMockito.when(under1, "isDpa", Mockito.anyString()).thenReturn(true);
    
  • Spy류 C의 m1 방법이 m2를 떨어뜨렸고, 클래스 C의 m1을 덮어쓰려면 시뮬레이션 말뚝 m2는spy
  • 를 고려할 수 있다.
  • AnswerObject[] args = invocation.getArguments();는 들어오는 파라미터를 경계를 넘지 않도록 주의하세요
  • 여러 번 되돌아오기를 희망하는 결과가 다르다. 예를 들어 첫 번째true, 두 번째falsePowerMockito.when(under1.isDpa(Mockito.anyString())).thenReturn(true).thenReturn(false);
  • Mock 던지기 이상PowerMockito.doThrow(new NullPointerException()).when(other).doExcep(Mockito.anyString()); 던지는 이상은 반드시 Mock 방법으로 던질 수 있어야 한다. 그렇지 않으면 Mock 던지기 이상이 있을 수 있으므로 테스트 용례의 큰 catch에 Assert를 쓰지 마라.assertTrue(true);프로그램의 버퍼링 이상을 판단합니다. 왜냐하면 이 이상은 모크가 던질 가능성이 높기 때문입니다.
  •     @Test
        public void test() 
        {
            try
            {
                // do some test
            }
            catch (Exception e)
            {
                e.printStackTrace();
                Assert.assertTrue(false);
            }
        }
    
  • 반사
  • UnderTest under = new UnderTest();
    StudentMgr stuMgr = PowerMockito.mock(StudentMgr.class);
    Class clazz = AbstractClass.class;
    Field field = clazz.getDeclaredField("studentMgr");
    field.setAccessible(true);
    field.set(under, stuMgr);
    

    FAQ
  • InitializationError @Test 주석에 jar 패키지 Junit 버전이 부족하지 않음 (junit는 4.12를 사용할 수 없음)
  • spy() vs mock()

  • spy() is used when you want the real code of the class you are spying on to do its job, but be able to intercept method calls and return values. mock() is used to make a new class that has the same interface as the class you are mocking, but with NO code inside...
    주의 사항
  • UT 정리 완료
  •     @BeforeClass        //  class 
        public static void setUpBeforeClass() throws Exception
        {
        }
        @AfterClass     //  class 
        public static void tearDownAfterClass() throws Exception
        {
        }
        @Before     //  Test 
        public void setUp() throws Exception
        {
        }
        @After      //  Test 
        public void tearDown() throws Exception
        {
        }
    
  • setUp()에서 모크의 물건은 모든 Test 주의에 영향을 미친다.
  • mock singleton static final : mock before other code new it. mock 단례는 다른 코드 new 앞에서
  • 테스트의 목적은 코드의 결함을 발견하고 문제를 발견하면 제때에 개발 확인을 하고 커버율만을 위해 테스트를 쓰지 않는다.전체 프로세스 가능한 전체 프로세스
  • 좋은 웹페이지 즐겨찾기