12

I keep getting a RuntimeException whenever I execute my test:

package com.example.mytipcalculator

import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.action.ViewActions.typeText
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.hamcrest.Matchers.containsString
import org.junit.Rule
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class CalculatorTests() {

    @get:Rule
    val activity = ActivityScenarioRule(MainActivity::class.java)

    fun test(){
        onView(withId(R.id.cost_of_service_edit_text))
        .perform(typeText("50.00"))
        .perform(ViewActions.closeSoftKeyboard())

        onView(withId(R.id.increase))
            .perform(click())

        onView(withId(R.id.increase))
            .perform(click())

        onView(withId(R.id.increase))
            .perform(click())

        onView(withId(R.id.increase))
            .perform(click())

        onView(withId(R.id.increase))
            .perform(click())

        onView(withId(R.id.calculate_button))
            .perform(click())

        onView(withId(R.id.tip_result))
            .check(matches(withText(containsString("$10.00"))))

        onView(withId(R.id.totalexpense))
            .check(matches(withText(containsString("$60.00"))))
    }
}

When I run the previous code, I get the following initialization error:

java.lang.RuntimeException: Failed to instantiate test runner class androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner
Test class class com.example.mytipcalculator.CalculatorTests is malformed. (1 problems):
java.lang.Exception: No runnable methods

at androidx.test.ext.junit.runners.AndroidJUnit4.throwInitializationError(AndroidJUnit4.java:129)
at androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:121)
at androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:82)
at androidx.test.ext.junit.runners.AndroidJUnit4.<init>(AndroidJUnit4.java:56)
... 14 trimmed
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:112)
... 17 more
Caused by: org.junit.runners.model.InitializationError
at org.junit.runners.ParentRunner.validate(ParentRunner.java:418)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65)
at androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner.<init>(AndroidJUnit4ClassRunner.java:43)
at androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner.<init>(AndroidJUnit4ClassRunner.java:48)
... 20 more
1
  • 2
    You probably have to annotate the test() method with the @Test annotation. Commented May 11, 2022 at 12:55

2 Answers 2

14

You have to annotate test() method with @Test annotation:

@Test
fun test() {
    ...
}
Sign up to request clarification or add additional context in comments.

Comments

7

Add @JvmField annotation, I encountered this error when testing jetpack compose.

Before

@Rule
val composeRule = createComposeRule()

after

@JvmField
@Rule
val composeRule = createComposeRule()

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.