Как добавить наборы инструментальных тестов и исходных тестов в существующий проект Android Studio - PullRequest
0 голосов
/ 07 июня 2019

Когда я создаю новый проект Gradle, я получаю два дополнительных каталога в дополнение к основному каталогу приложения, один для модульного тестирования и один для инструментального тестирования, например,

java
  com.example.myapplication
  com.example.myapplication (androidTest) <--- instrumented testing
  com.example.myapplication (test) <---- unit testing

Я полагаю, что эти два каталога в основномсодержит исходные наборы, которые Android Studio будет использовать Gradle для создания и запуска тестов на устройстве.

Однако я работаю с проектом, в котором отсутствуют эти две директории.У меня есть только каталог исходного кода приложения.

Все учебные пособия показывают только, как создавать тесты, при условии, что эти два каталога тестирования были автоматически созданы Android Studio.

Мне нужно знать, как создать этот источникустановить каталоги, но для меня это просто волшебство, и я понятия не имею, как это сделать.

Полагаю, в худшем случае я могу просто создать новый проект и перенести на него свой код,но я ненавижу это делать, потому что это на самом деле не решение, а просто неудачное решение.

Я использую плагин Android Gradle, поэтому я думаю, что я близок, но не помидор.Любой совет?

Спасибо.

1 Ответ

0 голосов
/ 07 июня 2019

CommonsWare является правильным.Вам просто нужно создать каталог androidTest и изменить конфигурацию в build.gradle (грубо говоря).

  1. Перейти к Project Просмотр
  2. Щелкните правой кнопкой мыши наsrc
  3. Выберите View in Terminal контекстную опцию
  4. Выполните ls в src каталоге
  5. Выполните mkdir androidTest и mkdir main и переместите com вmain

перейти к build.gradle и заменить src

sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src']
        resources.srcDirs = ['src']
        aidl.srcDirs = ['src']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
    }

    // ...
 }

на src/main (и, возможно, также установить корень на androidTest)

sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src/main']
        resources.srcDirs = ['src/main']
        aidl.srcDirs = ['src/main']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
    }

    androidTest {
        java.srcDirs = ['src/androidTest/java']
    }
    androidTest.setRoot('src/androidTest')

    // ...
}

тогда весь блок набора исходных кодов будет выглядеть для меня как минимум

sourceSets {
    main {
        manifest.srcFile 'AndroidManifest.xml'
        java.srcDirs = ['src/main']
        resources.srcDirs = ['src/main']
        aidl.srcDirs = ['src/main']
        res.srcDirs = ['res']
        assets.srcDirs = ['assets']
    }

    androidTest {
        java.srcDirs = ['src/androidTest/java']
    }
    androidTest.setRoot('src/androidTest')

    debug.setRoot('build-types/debug')
    release.setRoot('build-types/release')
}

, наконец, не забудьте добавить бегун по умолчанию, если он еще не включен, так что это

defaultConfig {
    applicationId "com.slacorp.myApp"
    minSdkVersion 19
    targetSdkVersion 26
    versionCode 190
    versionName "23.5"
}

становится этим

defaultConfig {
    applicationId "com.slacorp.myApp"
    minSdkVersion 19
    targetSdkVersion 26
    versionCode 190
    versionName "23.5"

    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

, затем добавляет зависимости, таким образом это

dependencies {
    implementation project(':lib-android-common-ui')
    implementation project(':android-lite')
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation project(':lib-j-rci')
}

становится этим

dependencies {
    implementation project(':lib-android-common-ui')
    implementation project(':android-lite')
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation project(':lib-j-rci')

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

}

и затем синхронизирует Gradle, затем добавьте тестовый классс импортом

import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;

import org.junit.Test;
import org.junit.runner.RunWith;

import static org.junit.Assert.assertEquals;

@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {

    @Test
    public  void useAppContext() throws Exception {
        // Context of the app under test.
        Context appContext = InstrumentationRegistry.getTargetContext();
        assertEquals("foo", appContext.getPackageName());
    }
}

, если это не работает, выполните file > sync with file system и file > invalidate and restart

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...