相关疑难解决方法(0)

Kotlin和新的ActivityTestRule:@Rule必须是公开的

我正在尝试在Kotlin中为我的Android应用程序进行UI测试.由于使用ActivityTestRule的新系统,我无法使其工作:它正确编译,并在运行时,我得到:

java.lang.Exception: The @Rule 'mActivityRule' must be public.
    at org.junit.internal.runners.rules.RuleFieldValidator.addError(RuleFieldValidator.java:90)
    at org.junit.internal.runners.rules.RuleFieldValidator.validatePublic(RuleFieldValidator.java:67)
    at org.junit.internal.runners.rules.RuleFieldValidator.validateField(RuleFieldValidator.java:55)
    at org.junit.internal.runners.rules.RuleFieldValidator.validate(RuleFieldValidator.java:50)
    at org.junit.runners.BlockJUnit4ClassRunner.validateFields(BlockJUnit4ClassRunner.java:170)
    at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:103)
    at org.junit.runners.ParentRunner.validate(ParentRunner.java:344)
    at org.junit.runners.ParentRunner.<init>(ParentRunner.java:74)
    at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:55)
    at android.support.test.internal.runner.junit4.AndroidJUnit4ClassRunner.<init>(AndroidJUnit4ClassRunner.java:38)
    at android.support.test.runner.AndroidJUnit4.<init>(AndroidJUnit4.java:36)
    at java.lang.reflect.Constructor.constructNative(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
    at android.support.test.internal.runner.junit4.AndroidAnnotatedBuilder.buildAndroidRunner(AndroidAnnotatedBuilder.java:57)
    at android.support.test.internal.runner.junit4.AndroidAnnotatedBuilder.runnerForClass(AndroidAnnotatedBuilder.java:45)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
    at org.junit.runner.Computer.getRunner(Computer.java:38)
    at org.junit.runner.Computer$1.runnerForClass(Computer.java:29)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
    at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:98)
    at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:84)
    at org.junit.runners.Suite.<init>(Suite.java:79)
    at org.junit.runner.Computer.getSuite(Computer.java:26)
    at android.support.test.internal.runner.TestRequestBuilder.classes(TestRequestBuilder.java:691)
    at android.support.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:654)
    at android.support.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:329)
    at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:226)
    at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
Run Code Online (Sandbox Code Playgroud)

以下是我宣称的mActivityRule:

RunWith(javaClass<AndroidJUnit4>())
LargeTest
public class RadisTest {

    Rule
    public val mActivityRule: ActivityTestRule<MainActivity> = …
Run Code Online (Sandbox Code Playgroud)

testing android kotlin android-espresso

246
推荐指数
5
解决办法
3万
查看次数

无法解析符号'AndroidJUnit4'

显然我需要正确的导入语句来解决这个问题.根据文档AndroidJUnit4,这应该是

import android.support.test.runner.AndroidJUnit4;
Run Code Online (Sandbox Code Playgroud)

当我这样做时,Android Studio突出显示runner为红色并抱怨"无法解析符号'跑步者'".

背景

我遵循Android开发者网站上的教程,使用UI Automator设置测试,从而达到了这一点.我遇到的第一个问题是,com.android.support:support-v4:22.2.0com.android.support.test:runner:0.2依赖于不同的版本com.android.support:support-annotations.我按照Android漏洞报告的建议,allprojects在我的项目中添加了以下内容build.gradle:

configurations.all {
    resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}
Run Code Online (Sandbox Code Playgroud)

这解决了即时错误,但我怀疑它导致了我当前的问题.有没有人有任何关于如何解决这个问题的建议?

从`./gradlew:app:dependencies中重新发布部分

androidTestCompile - Classpath for compiling the androidTest sources.
+--- com.jayway.android.robotium:robotium-solo:5.2.1
+--- com.squareup:fest-android:1.0.8
|    \--- org.easytesting:fest-assert-core:2.0M10
|         \--- org.easytesting:fest-util:1.2.5
+--- com.android.support.test:runner:0.2
|    +--- junit:junit-dep:4.10
|    |    \--- org.hamcrest:hamcrest-core:1.1
|    +--- com.android.support.test:exposed-instrumentation-api-publish:0.2
|    \--- com.android.support:support-annotations:22.0.0 -> 22.2.0
+--- com.android.support.test:rules:0.2
|    \--- com.android.support.test:runner:0.2 (*)
\--- com.android.support.test.uiautomator:uiautomator-v18:2.1.0

compile - Classpath …
Run Code Online (Sandbox Code Playgroud)

android gradle build.gradle android-uiautomator testing-support-library

129
推荐指数
9
解决办法
6万
查看次数

为什么我的@BeforeClass方法不能运行?

我有以下代码:

    @BeforeClass
    public static void setUpOnce() throws InterruptedException {
        fail("LOL");
    }
Run Code Online (Sandbox Code Playgroud)

以及@Before,@ After,@ Test或@AfterClass方法的各种其他方法.

启动时测试不会失败,因为它似乎应该.有谁可以帮助我吗?

我有JUnit 4.5

该方法在立即调用setUp()时失败,该注释被注释为@before.类def是:

public class myTests extends TestCase {
Run Code Online (Sandbox Code Playgroud)

java junit annotations

42
推荐指数
3
解决办法
3万
查看次数

无法加载 AndroidJUnit4 的委托运行程序“androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner”

我尝试为 android 运行 Kotlin 仪器测试。

在我的 app/build.gradle 中:

    android {
        dataBinding {
            enabled = true
        }
        compileSdkVersion 28
        defaultConfig {
            applicationId "com.myproject"
            minSdkVersion 18
            targetSdkVersion 28
            versionCode 6
            versionName "0.0.7"
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }

        sourceSets {
            main.java.srcDirs += 'src/main/kotlin'
            androidTest.java.srcDirs += 'src/androidTest/kotlin'
        }

androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0-alpha02'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test:rules:1.1.2-alpha02'
    androidTestImplementation 'androidx.test:runner:1.1.2-alpha02'
Run Code Online (Sandbox Code Playgroud)

在文件夹中/app/src/androidTest/kotlin/com/myproject/ 我有 Kotlin 测试:

import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import org.junit.Rule
import org.junit.runner.RunWith

import androidx.test.rule.ActivityTestRule
import com.myproject.ui.activity.TradersActivity
import org.junit.Before


@RunWith(AndroidJUnit4::class)
@SmallTest
class TradersActivityTest {

    private lateinit var stringToBetyped: String

    @get:Rule …
Run Code Online (Sandbox Code Playgroud)

kotlin android-espresso

17
推荐指数
4
解决办法
1万
查看次数

Android Studio 仪器测试状态未显示,但测试确实有效

当我运行 UI 测试时,它们工作得很好,并且我可以看到测试已通过日志传递。但 Android Studio 面板上的测试状态从未更新。

有人遇到过同样的问题吗?

测试结果作为日志:

Step2TableWithHeadersNextDirectionRow[SM-A505FN - 11] SUCCESS  
....
            2022-03-15T10:52:14.245+0100 [INFO] [com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask] [XmlResultReporter]: XML test result file generated at /Users/mySuperApp/app/build/outputs/androidTest-results/connected/flavors/superApp/TEST-SM-A505FN - 11-app-superApp.xml. Total tests 2, passed 2, 
            2022-03-15T10:52:14.247+0100 [QUIET] [system.out] 
    ....
Run Code Online (Sandbox Code Playgroud)

测试

Android Studio Bumblebee | 2021.1.1 Patch 2
Build #AI-211.7628.21.2111.8193401, built on February 17, 2022
Runtime version: 11.0.11+0-b60-7772763 aarch64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
macOS 12.2.1
GC: G1 Young Generation, G1 Old Generation
Memory: 2048M
Cores: 10
Registry: external.system.auto.import.disabled=true, ide.images.show.chessboard=true
Non-Bundled Plugins: org.jetbrains.kotlin …
Run Code Online (Sandbox Code Playgroud)

android android-testing android-studio android-espresso android-studio-girafee

11
推荐指数
1
解决办法
1305
查看次数

尝试将AndroidJUnit4与标准JUnit运行器和委托运行器'org.robolectric.RobolectricTestRunner'一起使用,无法加载

我正在使用espresso运行一些测试,但我不知道为什么roboelectric包含在此错误中,因为测试仅适用于浓缩咖啡,下面是错误:

java.lang.Exception: Attempted to use AndroidJUnit4 with standard JUnit runner and delegate runner 'org.robolectric.RobolectricTestRunner'could not be loaded. Check your build configuration.
at android.support.test.runner.AndroidJUnit4.loadRunner(AndroidJUnit4.java:89)
at android.support.test.runner.AndroidJUnit4.loadRunner(AndroidJUnit4.java:63)
at android.support.test.runner.AndroidJUnit4.<init>(AndroidJUnit4.java:57)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
at androidx.test.internal.runner.junit4.AndroidAnnotatedBuilder.runnerForClass(AndroidAnnotatedBuilder.java:63)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at androidx.test.internal.runner.AndroidRunnerBuilder.runnerForClass(AndroidRunnerBuilder.java:153)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at androidx.test.internal.runner.TestLoader.doCreateRunner(TestLoader.java:73)
at androidx.test.internal.runner.TestLoader.getRunnersFor(TestLoader.java:104)
at androidx.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:789)
at androidx.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:543)
at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:386)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2145)
Run Code Online (Sandbox Code Playgroud)

我按照浓缩咖啡的文档,我看到一切都很好.可能是什么问题呢 :

下面是我的gradle文件:

apply plugin: 'com.android.application'
apply plugin: 'jacoco'


jacoco {
    toolVersion = "0.7.6.201602180812"
}

tasks.withType(Test) …
Run Code Online (Sandbox Code Playgroud)

java android robolectric android-espresso

8
推荐指数
4
解决办法
4943
查看次数

RuntimeException:无法加载 AndroidJUnit4 的委托运行器

我正在尝试使用 Android Studio 为我的MainActivity.java班级使用 Junit4进行仪器测试 。我不知道我的代码是否正确,但这是我的测试类代码:

import android.widget.EditText;
import android.widget.TextView;

import androidx.test.espresso.Espresso;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.rule.ActivityTestRule;

import static org.junit.Assert.*;

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

@RunWith(AndroidJUnit4.class)
public class MainActivityTest{

    private EditText edt;
    private TextView txt;

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

    @Before
    public void setup(){
        edt = activityTestRule.getActivity().findViewById(R.id.edt);
        txt = activityTestRule.getActivity().findViewById(R.id.txt);
    }

    @Test
    public void edt_text_change() {
        //i want this test to be passed
        assertEquals("147", "147");
    }
}
Run Code Online (Sandbox Code Playgroud)

构建.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29 …
Run Code Online (Sandbox Code Playgroud)

java junit android android-instrumentation

2
推荐指数
1
解决办法
3010
查看次数