Làm cách nào để tạo thử nghiệm trong Android Studio?


109

Vừa tải xuống Android Studio dựa trên Ý tưởng Intellij.

Làm thế nào để tạo ra các bài kiểm tra?

Tôi nhận thấy có một tùy chọn để tạo Mô-đun kiểm tra nhưng điều này dường như không làm được gì, chỉ tạo một dự án mới với src

Tôi cũng đã thử nhấn phím nóng CTRL + AlT + T cho phép tạo các bài kiểm tra đơn vị trên một lớp hiện có nhưng có vẻ như muốn đặt nó trong dự án hiện tại. Tất nhiên điều này không giúp ích gì cho TDD

Có ai có bất kỳ kinh nghiệm ở đây?


2
Tôi cũng đã cố gắng tạo một dự án thử nghiệm. Nếu bạn làm điều đó với công cụ dòng lệnh Android giống như bạn làm với dự án Eclipse, thì bạn sẽ gặp lỗi vì nó không thể tìm thấy tệp AndroidManifest.xml. Có vẻ như Google cần cập nhật công cụ Android của họ để đối phó với các dự án Grundle. Tuy nhiên, tôi mới thử nghiệm trên Android nên không thể giúp bạn = (
Kage

Câu trả lời:


56

Câu trả lời này dành cho những người mới bắt đầu thử nghiệm Android. Tôi sẽ cung cấp hai ví dụ đơn giản để giúp bạn thấy cách kiểm tra hoạt động. Nếu bạn theo dõi trong 10 phút tiếp theo, bạn sẽ được thiết lập để bắt đầu thêm các thử nghiệm vào ứng dụng của riêng mình. Tôi nghĩ bạn sẽ ngạc nhiên vì nó dễ dàng như thế nào. Tôi chắc chắn đã.

Giới thiệu về Thử nghiệm Android

Có hai loại bài kiểm tra khác nhau mà bạn sẽ làm.

  • Kiểm tra đơn vị địa phương. Chúng được chạy cục bộ trên JVM (Máy ảo Java). Vì họ là người địa phương, họ nhanh chóng. Bạn có thể sử dụng chúng để kiểm tra các phần mã của mình chỉ cần Java chứ không cần API Android. (Đôi khi bạn có thể tạo một đối tượng API giả để kiểm tra cục bộ nhiều thứ hơn. Đây được gọi là chế độ giả. Một bản giả Contextlà một ví dụ.)
  • Kiểm tra công cụ. Các bài kiểm tra này được chạy trên thiết bị thực hoặc trong trình giả lập. Điều đó làm cho chúng chậm hơn so với các thử nghiệm địa phương. Tuy nhiên, chúng linh hoạt hơn vì bạn có sẵn API Android đầy đủ cho mình.

Tạo một dự án mới và bạn sẽ thấy các thư mục mặc định sau.

nhập mô tả hình ảnh ở đây

Mọi thứ đã ở đó và đang chờ bạn tạo các bài kiểm tra của mình. Tất cả đã được thiết lập rồi!

Cách tạo các bài kiểm tra đơn vị cục bộ

Mở ExampleUnitTesttệp được hiển thị trong hình trên. nó sẽ trông giống như thế này:

public class ExampleUnitTest {
    @Test
    public void addition_isCorrect() throws Exception {
        assertEquals(4, 2 + 2);
    }
}

Nhấn vào mũi tên đôi màu xanh lục để chạy tất cả các bài kiểm tra hoặc mũi tên màu xanh lá cây đơn để chỉ chạy một bài kiểm tra. (Trong trường hợp này chỉ có một bài kiểm tra nên cả hai đều làm điều tương tự.)

nhập mô tả hình ảnh ở đây

Nó sẽ trôi qua (miễn 2 + 2là vẫn còn 4khi bạn đang đọc câu trả lời này). Xin chúc mừng, bạn vừa chạy thử nghiệm đầu tiên của mình!

Làm bài kiểm tra của riêng bạn

Hãy viết thử nghiệm của riêng chúng ta. Trước tiên, hãy thêm lớp này vào dự án ứng dụng chính của bạn để chúng tôi có thứ gì đó để kiểm tra:

public class MyClass {
    public int add(int a, int b) {
        return a + b;
    }
}

Bây giờ thay đổi addition_isCorrect()phương thức trong lớp thử nghiệm để giống như đoạn mã sau (hoặc chỉ cần thêm một phương thức khác có tên khác):

public class ExampleUnitTest {
    @Test
    public void addition_isCorrect() throws Exception {
        MyClass myClass = new MyClass();
        int result = myClass.add(2, 2);
        int expected = 4;
        assertEquals(expected, result);
    }
}

Chạy lại và bạn sẽ thấy nó trôi qua. Xin chúc mừng, bạn vừa tạo thử nghiệm đầu tiên của riêng mình! (Chà, về mặt kỹ thuật thì tôi đoán nó là của tôi, nhưng, này, đủ gần rồi. Cái của tôi là của bạn.)

Cách tạo các bài kiểm tra công cụ

Mở ExampleInstrumentedTesttệp. nó sẽ trông giống như thế này:

@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
    @Test
    public void useAppContext() throws Exception {
        // Context of the app under test.
        Context appContext = InstrumentationRegistry.getTargetContext();

        assertEquals("com.example.myapp", appContext.getPackageName());
    }
}

Nhấn lại một trong các nút màu xanh lục đó.

nhập mô tả hình ảnh ở đây

Miễn là bạn đã kết nối thiết bị thực hoặc thiết lập trình giả lập, thì thiết bị đó sẽ phải khởi động và chạy ứng dụng của bạn. Xin chúc mừng, bạn vừa chạy thử nghiệm công cụ đầu tiên của mình!

Làm bài kiểm tra của riêng bạn

Các bài kiểm tra công cụ sử dụng Espresso để chạy các bài kiểm tra. Nó giống như người dùng robot nhỏ của riêng bạn mà bạn có thể thử nghiệm ứng dụng của mình. Bạn có thể yêu cầu nó làm điều gì đó như nhấn nút hoặc đọc các thuộc tính của TextView.

Bạn có thể viết hướng dẫn cách làm bài kiểm tra bằng tay, nhưng vì chúng ta mới bắt đầu nên hãy sử dụng chức năng ghi tự động . Nó siêu đơn giản.

Trước tiên, hãy thêm một nút vào giao diện người dùng của bạn để chúng tôi có thứ gì đó để làm việc. Tôi đã làm điều này:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.myapp.MainActivity">

    <Button
        android:id="@+id/myButton"
        android:text="Click me"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</android.support.constraint.ConstraintLayout> 

Sau đó nhấn Run> Record Espresso Test trong menu.

nhập mô tả hình ảnh ở đây

Sau khi nó khởi động, hãy nhấp vào nút trong trình giả lập và sau đó để kết thúc, hãy chọn OK trên hộp thoại Record. Nó sẽ tự động tạo mã kiểm tra sau.

@LargeTest
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);

    @Test
    public void mainActivityTest() {
        ViewInteraction appCompatButton = onView(
                allOf(withId(R.id.myButton), withText("Click me"), isDisplayed()));
        appCompatButton.perform(click());
    }
}

Tuyệt quá! Bạn vừa tạo cho mình bài kiểm tra công cụ đầu tiên! Điều đó thật dễ dàng. Bạn có thể nên thêm một xác nhận để biến nó trở thành một bài kiểm tra thực sự, nhưng điều đó cũng khá dễ thực hiện với máy ghi âm. Xem video này để đi sâu hơn một chút.

Học cao hơn

Tôi sẽ xem video trước và sau đó đọc qua tài liệu. Tất cả đều khá hữu ích. Liên kết cuối cùng là một loạt các bài báo bao gồm một số điều quan trọng cần suy nghĩ khi chọn những gì để kiểm tra.


1
Câu trả lời tuyệt vời @Suragch. Câu hỏi nhanh: tôi sẽ đặt các tệp hỗ trợ cho trường hợp kiểm thử đơn vị cục bộ ở đâu? Thật khó hiểu, nhưng tôi rất vui khi đặt đường dẫn đầy đủ từ cơ sở của bài kiểm tra, nhưng nếu tôi chạy trong Android Studio, các bài kiểm tra chạy từ root_ /app, tuy nhiên nếu tôi chạy từ dòng lệnh Gradle (hoặc CI) thì nó là _Rốt . (Lý tưởng nhất là tôi muốn truy cập các assetsthư mục cụ thể khi chạy cả hai cách).
mm2001

@ mm2001, tôi đã viết câu trả lời này như một cách để học cách tự kiểm tra, vì vậy tôi thậm chí còn chưa hiểu được như bạn có. Nếu bạn tìm ra điều này trước khi tôi làm, bạn có thể để lại nhận xét không?
Suragch

Tôi thấy điều này hữu ích: stackoverflow.com/a/42751502/19506 - nó nói tạo một thư mục test/resourcesvà đặt các tệp ở đó, ví dụ: test.txtvà truy cập chúng bằng getClass().getClassLoader().getResource("test.txt"). Tôi đã quyết định rằng việc truy cập trực tiếp vào nội dung APK có thể là một ý tưởng tồi, vì vậy tôi sẽ giải quyết vấn đề đó bằng cách sao chép các tệp để kiểm tra trong bước xây dựng hoặc trong quá trình cập nhật bên ngoài. Vẫn còn một số câu hỏi về các phiên bản khác nhau của Gradle, nhưng tôi vẫn chưa đối mặt với điều đó.
mm2001

36

Chỉnh sửa: Kể từ 0.1.8, điều này hiện được hỗ trợ trong IDE . Vui lòng làm theo hướng dẫn trong đó, thay vì sử dụng các hướng dẫn bên dưới.

Làm theo Hướng dẫn sử dụng plugin Android Gradle, tôi có thể nhận được các thử nghiệm hoạt động trên dòng lệnh bằng cách thực hiện các bước sau trên một dự án mới được tạo (tôi đã sử dụng gói 'com.example.myapplication' mặc định):

  1. Thêm thư mục src / toolsTest / java cho các bài kiểm tra
  2. Thêm một lớp thử nghiệm (mở rộng ActivityTestCase) trong gói com.example.myapplication.test
  3. Khởi động thiết bị ảo
  4. Trên dòng lệnh (trong thư mục MyApplicationProject / MyApplication), hãy sử dụng lệnh '../gradlew connectI Kinh nguyệtTest'

Điều này đã chạy các bài kiểm tra của tôi và đặt kết quả kiểm tra trong MyApplicationProject / MyApplication / build / report / toolsTests / được kết nối. Tôi mới thử nghiệm các ứng dụng Android, nhưng nó có vẻ hoạt động tốt.

Từ bên trong IDE, bạn có thể thử và chạy cùng một lớp thử nghiệm. Bạn sẽ cần

  1. Cập nhật build.gradle để liệt kê Maven Central dưới dạng repo
  2. Cập nhật build.gradle thêm JUnit 3.8 làm phụ thuộc toolsTestCompile, ví dụ: deviceTestCompile 'junit: junit: 3.8'
  3. Trong 'Cấu trúc dự án', di chuyển thủ công JUnit lên đầu tiên theo thứ tự phụ thuộc

Tuy nhiên điều này không thành công (classpath được sử dụng khi chạy các bài kiểm tra bị thiếu thư mục đầu ra kiểm tra). Tuy nhiên, tôi không chắc rằng điều này sẽ hoạt động vì tôi hiểu rằng cần phải có một người chạy thử nghiệm cụ thể trên Android.


20

Tôi sẽ đề nghị sử dụng tệp gradle.build .

  1. Thêm thư mục src / androidTest / java cho các bài kiểm tra (Giống như Chris bắt đầu giải thích)

  2. Mở tệp gradle.build và chỉ định ở đó:

    android {
    
        compileSdkVersion rootProject.compileSdkVersion
        buildToolsVersion rootProject.buildToolsVersion
    
        sourceSets {
    
            androidTest {
                java.srcDirs = ['androidTest/java']
            }
        }
    }
  3. Nhấn "Đồng bộ hóa dự án với tệp Gradle" (ở bảng trên cùng). Bây giờ bạn sẽ thấy một thư mục "java" (bên trong "androidTest") có màu xanh lục.

  4. Bây giờ Bạn có thể tạo ở đó bất kỳ tệp thử nghiệm nào và thực thi chúng.


Đừng quên androidTest.setRoot ('toolsTest')
IgorGanapolsky

3
Trong hiện tại phiên bản Android Studio nó không phải là cần thiết, hơn nữa - thay thế tất cả những gì có một cái tên instrumentTest với androidTest
Yuriy Chernyshov

Các tên 'toolsTest' và 'androidTest' là hoàn toàn tùy ý. Chúng chỉ là tên thư mục cho dự án thử nghiệm của bạn. Bạn cũng có thể tạo một thư mục 'kiểm tra'. Bên cạnh đó, tên gói của SDK trong khung thử nghiệm là android.test.IusalmentationTestCase. Vì vậy, về mặt kinh điển, tôi tin rằng 'công cụ' hoặc 'thiết bị đo đạc' vẫn có ý nghĩa trong việc đặt tên cho các bài kiểm tra của một người. Xem mã nguồn sau: grepcode.com/file/repository.grepcode.com/java/ext/…
IgorGanapolsky

7
Vui lòng đọc tài liệu tại đây: tools.android.com/tech-docs/new-build-system . Kể từ phiên bản 0.9.0 instrumentTest được đổi tên thành androidTest .
Yuriy Chernyshov

1
@IgorGanapolsky Đặt tên thư mục là androidTest KHÔNG phải là tùy ý. Nó phải được thực hiện để thư mục chuyển sang màu xanh lục.
thợ đồng hồ


10

Android Studio v.2.3.3

Đánh dấu ngữ cảnh mã bạn muốn kiểm tra và sử dụng phím nóng: CTRL+ SHIFT+T

Sử dụng giao diện hộp thoại để hoàn tất thiết lập của bạn.

Khung thử nghiệm được cho là phản ánh bố cục gói dự án của bạn để có kết quả tốt nhất, nhưng bạn có thể tạo các thử nghiệm tùy chỉnh theo cách thủ công, miễn là bạn có cài đặt thư mục và bản dựng chính xác.


7

Hiện tại (studio 0,61) duy trì cấu trúc dự án phù hợp là đủ. Không cần tạo dự án thử nghiệm riêng biệt như trong nhật thực (xem bên dưới).

Cấu trúc bài kiểm tra


4

Android Studio tiếp tục phát triển nên các phản hồi ở trên cuối cùng sẽ không còn áp dụng được nữa. Đối với phiên bản Android Studio 1.2.1.1 hiện tại, có một hướng dẫn thử nghiệm rất hay tại:

http://evgenii.com/blog/testing-activity-in-android-studio-tutorial-part-1/


2
Vâng, AS tiếp tục phát triển, vì vậy thật là ngớ ngẩn nếu ai đó tạo một bài báo về công nghệ tiên tiến và không bao giờ đề cập đến số phiên bản mà nó áp dụng. manh mối duy nhất là một ngày ở dưới cùng.
Tom

3

Một trong những thay đổi lớn dường như là với Android Studio, ứng dụng thử nghiệm được tích hợp vào dự án ứng dụng.

Tôi không chắc liệu điều này có giúp được vấn đề cụ thể của bạn hay không, nhưng tôi đã tìm thấy hướng dẫn về cách thực hiện các bài kiểm tra với một dự án Gradle. Hướng dẫn sử dụng Android Gradle


3

Cách dễ nhất mà tôi tìm thấy là sắp xếp hợp lý trong bài đăng blog sau của tôi :

  1. Tạo một thư mục trong đó bạn sẽ viết tất cả các bài kiểm tra đơn vị của mình (tốt nhất là com.example.app.tests)
  2. Tạo một lớp thử nghiệm mới (tốt nhất là NameOfClassTestedTests, tức là BankAccountLoginActivityTests)
  3. Mở rộng InstrumentationTestCase
  4. Viết một bài kiểm tra đơn vị thất bại để đảm bảo rằng chúng tôi đã định cấu hình thành công các bài kiểm tra đơn vị
  5. Lưu ý rằng tên phương pháp kiểm tra đơn vị phải bắt đầu bằng từ “kiểm tra” (tốt nhất là testTestedMethodNameEmpleteResult () tức là testBankAccountValidationFailedShouldLogout ())
  6. Định cấu hình dự án của bạn cho các bài kiểm tra đơn vị:
  7. Mở menu 'Chạy ...' và nhấp vào 'chỉnh sửa cấu hình'
  8. Nhấp vào nút +
  9. Chọn mẫu Thử nghiệm Android
  10. Nhập tên cho cấu hình chạy của bạn (tốt nhất là 'Thử nghiệm tên ứng dụng')
  11. Chọn ứng dụng của bạn trong hộp tổ hợp mô-đun
  12. Chọn nút radio “Tất cả trong gói” (nói chung bạn muốn chọn tùy chọn này vì nó chạy tất cả các bài kiểm tra đơn vị trong tất cả các lớp kiểm tra của bạn)
  13. Điền vào tên gói thử nghiệm từ bước 1 (tức là com.example.app.tests)
  14. Chọn thiết bị bạn muốn chạy thử nghiệm của mình
  15. Áp dụng và lưu cấu hình
  16. Chạy thử nghiệm đơn vị (và dự kiến ​​sẽ thất bại):
  17. Chọn cấu hình Kiểm tra mới tạo của bạn từ menu Chạy
  18. Nhấp vào Chạy và đọc kết quả trong bảng điều khiển đầu ra

Chúc may mắn làm cho mã của bạn dễ đọc hơn, có thể bảo trì và được thử nghiệm tốt!


Câu hỏi là về các bài kiểm tra thiết bị đo đạc! Tôi cũng gặp khó khăn khi viết một số bài kiểm tra thiết bị đo đạc. Xem câu hỏi của tôi tại stackoverflow.com/questions/35426990/…
Monica

2

Android Studio đã trở thành một mục tiêu di động, đầu tiên là bản xem trước dành cho nhà phát triển và hiện đang ở giai đoạn thử nghiệm. Đường dẫn cho các lớp Kiểm tra trong dự án đã thay đổi theo thời gian, nhưng bất kể bạn đang sử dụng phiên bản AS nào, đường dẫn được khai báo trong tệp .iml của bạn. Hiện tại, với phiên bản 0.8.3, bạn sẽ tìm thấy thông tin sau bên trong tệp iml bên trong:

      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
  <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
  <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
  <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
  <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
  <sourceFolder url="file://$MODULE_DIR$/src/androidTest/groovy" isTestSource="true" />
  <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
  <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />

Tệp .iml cho bạn biết nơi đặt các lớp thử nghiệm của bạn.



0

Thêm lib bên dưới bên trong tệp gradle

 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

Tạo lớp HomeActivityTest bên trong thư mục androidTest và trước khi chạy thử nghiệm, hãy thêm chuỗi flurry_api_key và sender_id bên trong tệp tài nguyên chuỗi và thay đổi giá trị cho trường hợp thất bại và thành công.

@RunWith(AndroidJUnit4.class)
public class HomeActivityTest
{
    private static final String SENDER_ID = "abc";
    private static final String RELEASE_FLURRY_API_KEY = "xyz";

    @Test
    public void gcmRegistrationId_isCorrect() throws Exception
    {
        // Context of the app under test.
        Context appContext = InstrumentationRegistry.getTargetContext();

        Assert.assertEquals(SENDER_ID, appContext.getString(R.string.sender_id));
    }

    @Test
    public void flurryApiKey_isCorrect() throws Exception
    {
        // Context of the app under test.
        Context appContext = InstrumentationRegistry.getTargetContext();

        Assert.assertEquals(RELEASE_FLURRY_API_KEY, appContext.getString(R.string.flurry_api_key));
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.