Android Instrumentation 테스트와 Android Studio의 단위 테스트의 차이점은 무엇입니까?
Android Studio 1.1rc부터 단위 테스트가 지원 되며 Android 계측 테스트와 단위 테스트의 차이점이 무엇인지 궁금합니다.
내가 이해하는대로 :
단위 테스트 는 Android API를 호출하지 않는 코드를 테스트 하는 데 유용하며 Android 계측 테스트 는 Android API 특정 요소 또는 GUI 구성 요소를 테스트하기위한 통합 테스트입니다.
그러나 단위 테스트에서 Robolectric 또는 Mockito 와 같은 프레임 워크를 사용하는 경우 실수가 아니라면 Android 코드를 장치없이 테스트 할 수 있습니다.
이것이 맞습니까, 아니면 더 큰 차이가 있습니까? 그렇다면 각각의 용도는 무엇입니까?
단위 테스트는 테스트 중인 구성 요소를 격리하고, 이것이 Mockito로 Mocks 프레임 워크와 함께 자주 사용되는 이유입니다. 또한 거기에 있기 때문에 당신은 안드로이드 API에 대한 말하세요 통지는, 부분적으로 사실이다 계장 단위 테스트 즉, 계측가 된 JUnit 패키지의 일부뿐만 아니라입니다 클래스로의 TestCase를 확장 또한 클래스 및 AndroidTestCase가Junit 패키지의 일부이지만 Android API의 일부인 getContext () 및 B) Resources로 호출 할 수있는 A) Context의 사용을 허용합니다! 또한 AndroidTestCase가 기본 클래스이며이 클래스를 확장하는 데 매우 유용한 몇 가지 다른 클래스가 있음을 고려하십시오. 특히 로더, ContentProvider 및 서비스를 테스트하고 Android API에 액세스 할 수도 있습니다. 따라서 이러한 클래스는 JUnit 테스트 프레임 워크와 Android 관련 메소드를 제공합니다. 이제 Junit4에는 Object에서 직접 확장되는 ServiceTestRule이 있으며이 클래스 내에서 Intent를 직접 시작할 수는 없지만 서비스를 더 쉽게 테스트 할 수 있습니다.
계측 테스트 는 Junit 패키지에도 포함되지만 계측 테스트는 애플리케이션 코드가 실행되기 전에 시스템에서 인스턴스화되고 테스트하려면 실제 애플리케이션 (에뮬레이터 또는 전화 USB로 연결). Android 구성 요소 (예 : 버튼 클릭) 및 애플리케이션 수명주기에 액세스합니다. 일반적으로 TestCase를 확장하는 Junit 테스트 (위에서 살펴본 항목)보다 느립니다. 일반적으로 기능 테스트 접근 방식이 더 많은 사용자 지향적 인 ActivityInstrumentationTestCase2와 함께 사용됩니다.
편집 : 현재 가장 인기있는 테스트 프레임 워크 (2016 년 7 월 13 일) 사이에 Espresso를 사용하는 Roboelectric과 Mockito와 관련하여 Roboelectric을 사용하면 몇 분이 아닌 몇 초 만에 여러 테스트를 실행할 수 있습니다. 지속적인 테스트를 실행하고 지속적인 통합이 적용됩니다.
Robolectric 사이트에서 :
Robolectric에 대한 또 다른 접근 방식은 Mockito와 같은 모의 프레임 워크를 사용하거나 Android SDK를 모의하는 것입니다. 이는 유효한 접근 방식이지만, 본질적으로 애플리케이션 코드의 역 구현 인 테스트를 생성하는 경우가 많습니다. Roboelectric은 블랙 박스 테스트에 더 가까운 테스트 스타일을 허용하여 테스트를 리팩토링에 더 효율적으로 만들고 테스트가 Android 구현 대신 애플리케이션의 동작에 집중할 수 있도록합니다. 원한다면 Robolectric과 함께 조롱 프레임 워크를 사용할 수 있습니다.
Junit에서도 사용할 수있는 Mockito는 최종 클래스, 익명 클래스 또는 기본 유형을 관리해야하는 경우를 제외하고는 실제로 사용됩니다.
계측 테스트는 앱의 수명주기와 이벤트 (onStart, onCreate 등)를 제어 할 수있는 기능을 통합 테스트하는 것 같습니다.
내가 이해하는 단위 테스트는 데이터와 동작에 대해 단위 (예 : 클래스)를 테스트하는 것입니다.
예를 들어 게임이 있다고 가정 해 보겠습니다.이 게임은 활동 (주요 활동)에서 실행되고 두 가지 메서드 (발사 및 이동)가있는 로봇 클래스를 기반으로하는 캐릭터가 있습니다. 계측 테스트로 주요 활동을 테스트하여 앱을 종료 할 때 올바르게 저장되는지, 복원 할 때 올바르게 복원되는지 등을 확인하고, 단위 테스트로 로봇을 테스트하여 속성과 동작을 테스트합니다.
면책 조항 : 나는 자바 사람이 아니지만 귀하의 질문에 관심이 있었고 온라인에서 사소한 검색을 기반으로 답변했습니다. 더 자세한 답변을 찾으려면 더 자세히 조사해야 할 것입니다.
단위 테스트
로컬 머신에서만 실행되는 단위 테스트. 이러한 테스트는 실행 시간을 최소화하기 위해 JVM에서 로컬로 실행되도록 컴파일됩니다. 이 접근 방식을 사용하여 Android 프레임 워크에 대한 종속성이 없거나 모의 객체가 충족 할 수있는 종속성이있는 단위 테스트를 실행합니다.
따라서 기본적으로 일반 Java 코드를 실행하여 예를 들어 콘텐츠 제공자, 데이터베이스 연결, 메소드의 입력 및 출력을 테스트합니다. 이것은 Android에서 실행되지 않습니다. 그것을 실행하기 위해 당신은 장치가 필요하지 않습니다.
계측 테스트
Android 기기 또는 에뮬레이터에서 실행되는 단위 테스트입니다. 이러한 테스트는 테스트중인 앱의 컨텍스트와 같은 계측 정보에 액세스 할 수 있습니다. 이 접근 방식을 사용하여 모의 객체가 쉽게 충족 할 수없는 Android 종속성이있는 단위 테스트를 실행합니다.
따라서 사용자가 실제 애플리케이션을 사용하는 방법을 조롱하므로이를 실행하려면 장치 (물리적 또는 에뮬레이터)가 필요합니다. 보기, 활동, 컨텍스트 등에 액세스 할 수 있습니다.
참조 : http://developer.android.com/tools/testing/testing_android.html
단위 테스트
일명 소규모 테스트
이들은 로컬 개발 머신에서 바로 실행할 수있는 작고 고도로 집중된 테스트이며 로컬 환경에서 직접 실행되기 때문에 매우 빠르고 실행 시간이 매우 짧습니다. 단위 테스트는 메서드 또는 클래스 와 같은 작은 코드 단위를 대상으로합니다 . 외부 종속성은 단위 테스트에서 제거해야합니다. 예를 들어 종속성을 테스트 구현 또는 테스트 프레임 워크에 의해 생성 된 (모의) 개체로 대체하여 [Mock vs Stub]
Integration Tests
aka Medium tests
These are the tests that will actually run on a real device and not on a local machine and is meant to test the integration between different modules working together. Integration tests are able to spot issues like wiring of components, network access, database issues, etc.
- Interactions between a view and view model
- Tests in your app's repository layer...
End-to-End Tests
aka Functional tests, aka Large tests
These tests also run on an actual device and the scope of these tests are much larger as they are testing a complete feature or a flow completely end-to-end. As a result the fidelity of these tests is much higher. It allows to validate end-to-end workflows that guide users through multiple modules and features.
Unit Testing:
- JUnit
- Mockito
- PowerMock
UI Testing:
- Espresso
- UIAutomator
- Robotium, Appium, Calabash, Robolectric
Read more here, here, here
How to run tests from the command line here
Unit Testing:
Often Unit tests are referred to as “local tests” or “local unit tests”. The main reason for this seems to be that you want to be able to run tests without a device or an emulator attached.
Unit tests cannot test the UI for your app without mocking objects such as an Activity.
Instrumentation tests:
Instrumentation tests run on a device or an emulator. In the background, your app will be installed and then a testing app will also be installed which will control your app, launching it and running UI tests as needed.
Instrumentation tests can be used to test none UI logic as well. They are especially useful when you need to test code that has a dependency on a context.
Ref link for example
Unit Testing
It Runs on the local machine only.
Instrumentation Test case
It Runs on the android device or emulator .if you check the test case it runs on emulator or android device
https://developer.android.com/training/testing/fundamentals.html#testing-pyramid
소규모 테스트는 프로덕션 시스템에서 격리하여 실행할 수있는 단위 테스트입니다. 일반적으로 모든 주요 구성 요소를 모의하며 컴퓨터에서 빠르게 실행되어야합니다.
중간 테스트는 소규모 테스트와 대규모 테스트 사이에있는 통합 테스트입니다. 여러 구성 요소를 통합하고 에뮬레이터 또는 실제 장치에서 실행됩니다.
대규모 테스트는 UI 워크 플로를 완료하여 실행되는 통합 및 UI 테스트입니다. 주요 최종 사용자 작업이 에뮬레이터 또는 실제 장치에서 예상대로 작동하도록합니다.
'Nice programing' 카테고리의 다른 글
| BitBucket에 구성된 git 프로젝트의 이름을 바꾸는 가장 쉬운 방법 (0) | 2020.11.11 |
|---|---|
| Gradle의 종속성 그래프에서 '->'(화살표)는 무엇을 의미합니까? (0) | 2020.11.11 |
| Redux에서 mapStateToProps없이 DispatchToProps를 매핑 할 수 있습니까? (0) | 2020.11.11 |
| 'foreach'루프에서 목록을 수정하는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.11 |
| Jquery $ (this) 자식 선택기 (0) | 2020.11.11 |
