- 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 จำลองสำหรับเริ่มทำการทดสอบได้แล้ว