Android 공부/단위테스트 관련

단위테스트? : (JUnit, Mock ) 01

Machine_웅 2022. 3. 21. 21:24
728x90
반응형

1. 수동 테스트 vs 자동 테스트

수동 테스트의 장점

 - 최종 사용자와 완전히 똑같은 동작을 확인할 수 있음.

 - 사용성, 쾌적함 등 정성적인 부분의 면에서 평가가 가능.

자동 테스트의 장점

 - 반복실행 가능

 - 테스트 실행 상황을 시각화

 - 클래스와 메서드등 확인하기 어려운 단위동작을 확인

 

2. 프레임 웍

 1) 단위 테스트 

  - JUnit 

  - Mockito ( 목 라이프러리 )

 

 2) UI 테스트

  - Espresso

 

* 단위테스트를 공부할 수 있는 링크

https://www.javatpoint.com/junit-tutorial

 

JUnit Tutorial | Testing Framework for java - javatpoint

Junit tutorial for beginners and professionals, junit 4, a testing framework for java programmer, creating test cases, junit example in eclipse

www.javatpoint.com

 

3. 목 객체
 - 단위테스트는 IO처리 등과 같은 외부의 영향을 받지 않게 테스트를 해야하는데 테스트를 위해서

실제로는 IO처리 등을 하지않고 원하는 값을 반환처리하거나 실행하는 것( 위장 )이 필요하다.

 

 - 이런 위장을 간편하게 구현 할 때 사용하는 것이 "목 객체"

https://site.mockito.org/

 

Mockito framework site

Intro Why How More Who Links Training Why drink it? Mockito is a mocking framework that tastes really good. It lets you write beautiful tests with a clean & simple API. Mockito doesn’t give you hangover because the tests are very readable and they produc

site.mockito.org

 

 목의 여러 가지 기능 들.

  - 객체의 반환값 고정

  - 메서트 호출 여부 검증

  - 객체의 일부 메서드 교체

  - 의존성 주입  

  - 등등.

 

* Mockito를 이용하면 가독성이 높고, 간결한 테스트 코드를 작성 할 수 있습니다.

 

JUnit 기초 

 

JUnit의 assert 메소드들

  • assertEquals(A, B) : 객체 A와 B가 같은 값을 가지는지 확인한다.
  • assertEquals(A, B, C) : 객체 A와 B가 같은 값을 가지는지 확인한다. C는 오차범위.
  • assertArrayEquals(A, B) : 배열 A와 B가 일치하는지 확인한다.
  • assertSame(A, B) : 객체 A와 B가 같은 객체인지 확인한다.
  • assertTrue(A) : 조건 A가 참인지 확인한다.
  • assertNull(A) : 객체A가 Null인지 확인한다.
  • assertNotNull(A) 객체 A가 Null이 아닌지 확인한다.

assertThat()도 있지만, AssertJ의 사용법이 더 쉬운 것 같아 나중에 AssertJ 공부할 때 더 자세히 알아보고 같이 정리해야겠다.

JUnit의 어노테이션

  • @Test
    : 메소드 위에 해당 어노테이션을 선언해, 테스트 대상 메소드임을 지정할 수 있다.
  • @Test(timeout=밀리초)
    : 테스트 메소드 수행 시간을 제한할 수 있다.
    테스트메소드가 리턴값을 반환하는 데에 걸리는 시간이 지정된 밀리초를 넘긴다면 해당 테스트는 실패로 판별한다.
  • @Test(expected=예외)
    : 해당 테스트 메소드 예외 발생 여부에 따라 성공/실패를 판별할 수 있다.
    expected=에 지정된 예외가 발생해야 테스트가 성공한 것으로 판별한다.
  • @Ignore
    : 해당 어노테이션이 선언된 테스트 메소드를 실행하지 않도록 지정한다.
  • @BeforeEach == (구)@Before
    : 모든 @Test메소드가 실행되기 전에 실행되는 메소드를 지정하는 어노테이션이다.
    • 각 테스트 시작 전에 각각 호출된다.
    • @Test메서드에서 공통으로 사용되는 코드를 @Before메서드에 선언해 사용하면 좋다.
    • 테스트마다 공통으로 쓰이면서, 테스트 전에 리셋되어야 할 항목이 들어간다
  • @AfterEach == (구)@After
    : 모든 @Test메소드의 실행이 끝난 뒤에 실행되는 메소드를 지정하는 어노테이션이다.
    • 각 테스트가 끝나고 각각 호출된다.
  • @BeforeAll == (구)@BeforeClass
    : 해당 테스트 클래스가 실행될 때 딱 한 번만 수행되는 테스트 메소드를 지정하는 어노테이션이다.
  • @AfterAll == (구)@AfterClass
    : 해당 테스트 클래스가 실행이 끝난 뒤에 딱 한 번만 수행되는 테스트 메소드를 지정하는 어노테이션이다.
    • 테스트클래스의 모든 테스트가 완료된 뒤 한 번 호출된다.

 

*스프라우트 메서트 - 새로추가하는 부분을 완전히 별개의 조작으로 다루는 메서드 

*랩 메서드 - 처리를 감싸고있는 메서드

 

 

https://developer.android.com/codelabs/advanced-android-kotlin-training-testing-basics#0

 

Advanced Android in Kotlin 05.1: Testing Basics  |  Android Developers

Learn the basics of testing your Android Kotlin apps. In this codelab you’ll learn to run tests, write basic tests, work with AndroidX Test, as well as test ViewModel and LiveData.

developer.android.com

 

728x90
반응형