• Clone project จาก github.com

https://github.com/j4cksw/espresso-workshop-login

  • ภายใน app/build.gradle เพิ่ม config สำหรับติดตั้ง MockWebServer
dependencies {
    ...

    implementation 'com.squareup.okhttp3:okhttp:3.9.0'
    androidTestImplementation 'com.squareup.okhttp3:mockwebserver:3.9.0'
}
  • สร้างไฟล์ LoginWithMockServerTest.java ใน app/src/androidTest/java/com.jacksw.espress_login_demo เริ่มต้นให้มี code ดังนี้
@RunWith(AndroidJUnit4.class)
public class LoginMockServerTest {

}
  • เนื่องจากเรามีขั้นตอนในการเตรียมการทดสอบ ตั้งนั้นต้องระบุให้ App ยังไม่ต้องเริ่มทำงานทันทีตอนที่เริ่มทำการทดสอบ
@RunWith(AndroidJUnit4.class)
public class LoginMockServerTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityRule =
            new ActivityTestRule(MainActivity.class, true, false);

}
  • เพิ่มขั้นตอนการ Setup ก็จะเป็นการสร้าง Server จำลองขึ้นมาแล้วสั่งให้เริ่มการทำงาน
@RunWith(AndroidJUnit4.class)
public class LoginMockServerTest {
@Rule
public ActivityTestRule<MainActivity> mActivityRule =
new ActivityTestRule(MainActivity.class, true, false);

private MockWebServer server;

@Before
    public void setUp() throws Exception {
        server = new MockWebServer();
        server.start();
    }
}
  • ตรงนี้เป็นจุดสำคัญอีกหนึ่งจุด คือเปลี่ยนแปลง BASE_URL ของ Application ให้มาชี้ที่ URL ของตัว Mock server นี้แทน ซึ่งขึ้นอยู๋กับการออกแบบของ App แต่ละตัว แต่ในตัวอย่างนี้ จะเก็บไว้ในไฟล์ LoginAPIEndpoint เพื่อให้เข้าถึงง่าย ทำการทดสอบได้ง่าย
@RunWith(AndroidJUnit4.class)
public class LoginMockServerTest {
@Rule
public ActivityTestRule<MainActivity> mActivityRule =
new ActivityTestRule(MainActivity.class, true, false);

private MockWebServer server;

@Before
    public void setUp() throws Exception {
        server = new MockWebServer();
        server.start();

        LoginAPIEndpoint.BASE_URL = server.url("/").toString();
    }
}
  • ลำดับต่อมาคือการกำหนดว่า Test case ที่กำลังจะทำการทดสอบ ต้องการ response แบบไหน อย่างเช่น ต้องการจำลองให้ server ตอบ 200 กลับมา ก็สามารถกำหนดได้ในลักษณะนี้
@Test
    public void loginSuccess() {
        server.enqueue(new MockResponse().setResponseCode(200));
        }

เพียงเท่านี้ ก็มี server จำลองสำหรับเริ่มทำการทดสอบได้แล้ว

results matching ""

    No results matching ""