สร้างการทดสอบแบบมีเครื่องควบคุม

การทดสอบที่มีเครื่องดนตรีจะทำงานบนอุปกรณ์ Android ไม่ว่าจะเป็นอุปกรณ์จริงหรือจำลอง อาส ทำให้ทีมสามารถใช้ประโยชน์จาก API ของเฟรมเวิร์ก Android การทดสอบที่มีเครื่องดนตรี จึงเป็นข้อมูลที่แม่นยํามากกว่าการทดสอบในท้องถิ่น แต่การทดสอบดังกล่าวจะทํางานมากกว่า อย่างช้าๆ

เราขอแนะนำให้ใช้การทดสอบแบบมีเครื่องวัดเฉพาะในกรณีที่คุณต้องทดสอบ ลักษณะการทำงานของอุปกรณ์จริง AndroidX Test มีไลบรารีจำนวนมาก ที่ช่วยให้เขียนการทดสอบแบบมีเครื่องวัดได้ง่ายขึ้นเมื่อจำเป็น

ตั้งค่าสภาพแวดล้อมการทดสอบ

ในโปรเจ็กต์ Android Studio คุณจะต้องจัดเก็บไฟล์ต้นฉบับสำหรับการวัดคุม การทดสอบใน module-name/src/androidTest/java/ มีไดเรกทอรีนี้อยู่แล้วเมื่อ คุณจะสร้างโปรเจ็กต์ใหม่และมีตัวอย่างการทดสอบแบบมีเครื่องวัด

ก่อนเริ่มใช้งาน คุณควรเพิ่ม AndroidX Test API ซึ่งช่วยให้คุณ สร้างและเรียกใช้โค้ดทดสอบที่มีการวัดคุมสำหรับแอปของคุณ การทดสอบ AndroidX ประกอบด้วย ตัวดำเนินการทดสอบ JUnit 4, AndroidJUnitRunner และ API สำหรับการทดสอบ UI การทำงาน เช่น Espresso, UI Automator และการทดสอบ Compose

นอกจากนี้ คุณยังต้องกำหนดค่าทรัพยากร Dependency ของการทดสอบ Android สำหรับโปรเจ็กต์ของคุณเพื่อ ใช้ตัวดำเนินการทดสอบและ API ของกฎจาก AndroidX Test

คุณต้องระบุไลบรารีเหล่านี้ในไฟล์ build.gradle ระดับบนสุดของแอป เป็นทรัพยากร Dependency:

dependencies {
    androidTestImplementation "androidx.test:runner:$androidXTestVersion"
    androidTestImplementation "androidx.test:rules:$androidXTestVersion"
    // Optional -- UI testing with Espresso
    androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
    // Optional -- UI testing with UI Automator
    androidTestImplementation "androidx.test.uiautomator:uiautomator:$uiAutomatorVersion"
    // Optional -- UI testing with Compose
    androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
}

คุณสามารถค้นหาเวอร์ชันล่าสุดได้ในบันทึกประจำรุ่นของ AndroidX และ Compose บันทึกประจำรุ่นของ UI

หากต้องการใช้คลาสทดสอบ JUnit 4 และมีสิทธิ์เข้าถึงฟีเจอร์ต่างๆ เช่น การกรองการทดสอบ โปรดตรวจสอบว่าได้ระบุ AndroidJUnitRunner เป็นเครื่องมือทดสอบเริ่มต้น ในโปรเจ็กต์ของคุณโดยรวมการตั้งค่าต่อไปนี้ใน ไฟล์ build.gradle ระดับโมดูล:

android {
    defaultConfig {
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
}

สร้างชั้นเรียนการทดสอบแบบมีเครื่องวัด

ชั้นเรียนการสอบเครื่องดนตรีของคุณควรเป็นคลาสการสอบ JUnit 4 ที่คล้ายกับ ชั้นเรียนที่อธิบายไว้ในส่วนวิธีสร้างการทดสอบในท้องถิ่น

หากต้องการสร้างคลาสทดสอบ JUnit 4 แบบมีเครื่องควบคุม ให้ระบุ AndroidJUnit4 เป็น ตัวดำเนินการทดสอบเริ่มต้น

ตัวอย่างต่อไปนี้แสดงวิธีการเขียนการทดสอบแบบมีเครื่องวัดเพื่อยืนยัน มีการใช้งานอินเทอร์เฟซแบบพาร์เซลอย่างถูกต้องสำหรับ LogHistory ชั้นเรียน:

Kotlin

import android.os.Parcel
import android.text.TextUtils.writeToParcel
import androidx.test.filters.SmallTest
import androidx.test.runner.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith

const val TEST_STRING = "This is a string"
const val TEST_LONG = 12345678L

// @RunWith is required only if you use a mix of JUnit3 and JUnit4.
@RunWith(AndroidJUnit4::class)
@SmallTest
class LogHistoryAndroidUnitTest {
    private lateinit var logHistory: LogHistory

    @Before
    fun createLogHistory() {
        logHistory = LogHistory()
    }

    @Test
    fun logHistory_ParcelableWriteRead() {
        val parcel = Parcel.obtain()
        logHistory.apply {
            // Set up the Parcelable object to send and receive.
            addEntry(TEST_STRING, TEST_LONG)

            // Write the data.
            writeToParcel(parcel, describeContents())
        }

        // After you're done with writing, you need to reset the parcel for reading.
        parcel.setDataPosition(0)

        // Read the data.
        val createdFromParcel: LogHistory = LogHistory.CREATOR.createFromParcel(parcel)
        createdFromParcel.getData().also { createdFromParcelData: List<Pair<String, Long>> ->

            // Verify that the received data is correct.
            assertThat(createdFromParcelData.size).isEqualTo(1)
            assertThat(createdFromParcelData[0].first).isEqualTo(TEST_STRING)
            assertThat(createdFromParcelData[0].second).isEqualTo(TEST_LONG)
        }
    }
}

Java

import android.os.Parcel;
import android.util.Pair;
import androidx.test.runner.AndroidJUnit4;
import com.google.common.truth.Truth.assertThat;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

// @RunWith is required only if you use a mix of JUnit3 and JUnit4.
@RunWith(AndroidJUnit4.class)
public class LogHistoryAndroidUnitTest {

    public static final String TEST_STRING = "This is a string";
    public static final long TEST_LONG = 12345678L;
    private LogHistory mLogHistory;

    @Before
    public void createLogHistory() {
        mLogHistory = new LogHistory();
    }

    @Test
    public void logHistory_ParcelableWriteRead() {
        // Set up the Parcelable object to send and receive.
        mLogHistory.addEntry(TEST_STRING, TEST_LONG);

        // Write the data.
        Parcel parcel = Parcel.obtain();
        mLogHistory.writeToParcel(parcel, mLogHistory.describeContents());

        // After you're done with writing, you need to reset the parcel for reading.
        parcel.setDataPosition(0);

        // Read the data.
        LogHistory createdFromParcel = LogHistory.CREATOR.createFromParcel(parcel);
        List<Pair<String, Long>> createdFromParcelData
                = createdFromParcel.getData();

        // Verify that the received data is correct.
        assertThat(createdFromParcelData.size()).isEqualTo(1);
        assertThat(createdFromParcelData.get(0).first).isEqualTo(TEST_STRING);
        assertThat(createdFromParcelData.get(0).second).isEqaulTo(TEST_LONG);
    }
}

เรียกใช้การทดสอบแบบมีเครื่องควบคุม

โดยการทดสอบที่มีเครื่องควบคุมสามารถดำเนินการบนอุปกรณ์จริงหรือโปรแกรมจำลองได้ ใน Android คู่มือสำหรับ Studio ให้คุณได้เรียนรู้วิธีการต่อไปนี้

แหล่งข้อมูลเพิ่มเติม

การทดสอบ UI มักจะเป็นการทดสอบด้วยเครื่องมือที่ช่วยยืนยันลักษณะการทำงานที่ถูกต้องของ UI โดยใช้เฟรมเวิร์ก เช่น Espresso หรือ Compose Test เพื่อเรียนรู้ โปรดอ่านคู่มือการทดสอบ UI

โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้การทดสอบการวัดคุมได้ที่ ที่ไม่ซับซ้อน

ตัวอย่าง

Codelab