Skip to content
coooldoggy.dev

Android App 테스트- Junit test

Android1 min read

안드로이드 테스트에는 다음과 같은 방법이 있다.

1.txt파일을 밀어넣어서 스크립트대로 동작하게하기 2.adb 명령어를 통한 랜덤테스트 3.Junit 테스트를 작성하여 실행

지난 포스트에 이어 JUnit을 이용한 테스트에 관해 적어보겠다.

먼저 안드로이드 프로젝트에 gradle을 추가해준다.

1dependencise{
2 .
3 .
4 .
5 testImplementation 'junit:junit:4.12'
6 androidTestImplementation 'com.android.support.test:runner:1.0.2'
7 androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
8 androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
9 }

그리고 테스트를 작성하는데 app > java > 밑에 (androidTest)라고 붙어있는 폴더에 작성한다.

1@RunWith(AndroidJUnit4.class)
2public abstract class ExampleInstrumentedTest {
3 private UiDevice mDevice;
4 private final String packageName = "your package name";
5
6 @Before
7 public void initialize(){
8 mDevice = UiDevice.getInstance(getInstrumentation());
9 assertThat(mDevice, notNullValue());
10
11 try {
12 if(!mDevice.isScreenOn()){
13 mDevice.wakeUp();
14 }
15 } catch (RemoteException e) {
16 e.printStackTrace();
17 }
18 }
19
20 @Test
21 public void test() {
22 }
23
24
25 public String getPackageName() {
26 return packageName;
27 }
28
29 public UiDevice getmDevice() {
30 return mDevice;
31 }
32
33 public void setmDevice(UiDevice mDevice) {
34 this.mDevice = mDevice;
35 }

이 코드는 여러가지 테스트를 수행하기 위해 공통으로 사용하는 코드를 super클래스로 만들었다. 이렇게 하고 싶지 않으면 abstract를 빼고 @Test에 테스트 스크립트를 작성하면 된다.

1public class CampLogin extends ExampleInstrumentedTest {
2 private String errMsg;
3 private UiDevice mDevice;
4 private UiSelector uiSelector;
5
6 @Override
7 public void initialize() {
8 super.initialize();
9 mDevice = super.getmDevice();
10 }
11
12 @Override
13 public void test() {
14 try {
15 openCamp(super.getPackageName());
16 }catch (Exception e){
17 //error가 생겼을때 할 것 작성
18 }
19
20 }
21
22 private void openCamp(String packagename) {
23 errMsg = "앱구동 오류";
24 Context context = InstrumentationRegistry.getContext();
25 Intent intent = context.getPackageManager().getLaunchIntentForPackage(packagename);
26
27 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
28 context.startActivity(intent);
29
30 //패키지가 실행될 때 까지 기다린다.
31 mDevice.wait(Until.hasObject(By.pkg(packagename)), 3000);
32
33 //login_btn id를 찾아 클릭하고 새창이 열릴 때 까지 기다린다.
34 UiObject2 obj = mDevice.findObject(By.res(packagename + ":id/login_btn"));
35 obj.clickAndWait(Until.newWindow(), 3000);
36
37 //email_address id를 찾아 클릭하고 텍스트를 설정한다.
38 obj = mDevice.findObject(By.res(packagename + ":id/email_address"));
39 obj.click();
40 obj.setText("");
41
42 //back 버튼을 클릭한다.
43 mDevice.pressBack();
44
45 //drag 실행 (point, speed)
46 mDevice.drag(new Point(1,1),500);
47
48
49 obj = mDevice.findObject(By.res(packageName+":id/content_layout"));
50 obj.findObjects(By.clazz("android.widget.ImageView")).get(6).click();
51
52 obj = mDevice.findObject(By.text("확인").clazz("android.widget.Button"));
53 obj.click();
54
55 }