Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 浓缩咖啡失败时设置生成失败_Android_Jenkins_Gradle_Automated Tests_Android Espresso - Fatal编程技术网

Android 浓缩咖啡失败时设置生成失败

Android 浓缩咖啡失败时设置生成失败,android,jenkins,gradle,automated-tests,android-espresso,Android,Jenkins,Gradle,Automated Tests,Android Espresso,Gradle在单元测试失败时将构建设置为失败,但在插入指令的测试失败时将构建设置为成功(在我的例子中是espresso)。有人知道如何在espresso失败时强制构建失败吗 Ops:需要与Jenkins集成,所以当单元测试和浓缩咖啡测试失败时,它一定会失败,并且不想使用Jenkins文本查找插件。为了让大家知道,我创建了一个解决方案,答案如下:,我做到了 并执行./gradlew connectedAndroidTest——继续 现在,它对这两种风格都运行了所有检测测试,如果其中任何一种失败,构

Gradle在单元测试失败时将构建设置为失败,但在插入指令的测试失败时将构建设置为成功(在我的例子中是espresso)。有人知道如何在espresso失败时强制构建失败吗


Ops:需要与Jenkins集成,所以当单元测试和浓缩咖啡测试失败时,它一定会失败,并且不想使用Jenkins文本查找插件。

为了让大家知道,我创建了一个解决方案,答案如下:,我做到了

并执行./gradlew connectedAndroidTest——继续


现在,它对这两种风格都运行了所有检测测试,如果其中任何一种失败,构建也会失败。

为了让大家知道,我找到了一个解决方案,答案如下:,我做到了

并执行./gradlew connectedAndroidTest——继续


现在,它为这两种风格运行所有检测测试,如果其中任何一种失败,构建也会失败。

我找到了更干净的解决方案,在root build.gradle中使用:

//if in start command "--continue" was added, then apply ignoring for android test fails
gradle.taskGraph.whenReady { graph ->
    if (gradle.startParameter.continueOnFailure) {
        graph.allTasks.findAll { it.name ==~ /connected.*AndroidTest/ }*.ignoreFailures = true
    }
}

我找到了更干净的解决方案,在root build.gradle中使用:

//if in start command "--continue" was added, then apply ignoring for android test fails
gradle.taskGraph.whenReady { graph ->
    if (gradle.startParameter.continueOnFailure) {
        graph.allTasks.findAll { it.name ==~ /connected.*AndroidTest/ }*.ignoreFailures = true
    }
}

这个解决方案对我有效。 将此代码添加到UI测试类:

// Use this TestRule to setup IdlingResource
@Rule
@JvmField
val mIdlingResourceTestRule = CustomIdlingResTestRule()
这是CustomIdlingResTestRule的代码:

import androidx.test.espresso.IdlingPolicies
import androidx.test.espresso.IdlingRegistry
import com.jakewharton.espresso.OkHttp3IdlingResource
import com.kasikorn.retail.mbanking.kplus.basemodule.AppModule
import com.kasikorn.retail.mbanking.kplus.util.OkHttpProvider
import org.junit.rules.TestRule
import org.junit.runner.Description
import org.junit.runners.model.Statement
import java.util.concurrent.TimeUnit

/**
 * TestRule class help to setup IdlingResource
 */
class CustomIdlingResTestRule : TestRule {
    protected var mIdlingResource: CustomIdlingResource = CustomIdlingResource()

    val idlingResourceOkHttp: OkHttp3IdlingResource by lazy {
        OkHttp3IdlingResource.create(AppModule.APP_CONTEXT, OkHttpProvider.getOkHttpInstance())
    }

    override fun apply(base: Statement?, description: Description?): Statement {
        return object : Statement() {
            override fun evaluate() {
                IdlingPolicies.setMasterPolicyTimeout(60, TimeUnit.SECONDS)
                IdlingPolicies.setIdlingResourceTimeout(26, TimeUnit.SECONDS)
                IdlingRegistry.getInstance().register(idlingResourceOkHttp, mIdlingResource)
                //NOTE: use try cache to ignore UI Test Failures
                try {
                    base?.evaluate()
                } catch (e: Throwable) {
                    e.printStackTrace()
                }

                IdlingRegistry.getInstance().unregister(idlingResourceOkHttp, mIdlingResource)
            }

        }
    }
}

import android.app.Activity
import android.util.Log
import androidx.test.espresso.IdlingResource
import androidx.test.espresso.core.internal.deps.guava.collect.Iterables
import androidx.test.runner.lifecycle.ActivityLifecycleMonitorRegistry
import androidx.test.runner.lifecycle.Stage

class CustomIdlingResource() : IdlingResource {
    private var mIsIdle = false
    private var resourceCallback: IdlingResource.ResourceCallback? = null

    override fun getName(): String = this.javaClass.simpleName

    override fun isIdleNow(): Boolean {
        if (mIsIdle) return true
        val currentActivity = getCurrentActivity()
        Log.d("LOG", this.javaClass.simpleName + " | isIdleNow() | currentActivity: $currentActivity")
        if (currentActivity != null) {
            mIsIdle = true
            resourceCallback?.onTransitionToIdle()
        }
        return mIsIdle
    }

    override fun registerIdleTransitionCallback(callback: IdlingResource.ResourceCallback?) {
        this.resourceCallback = callback
    }

    private fun getCurrentActivity(): Activity? {
        val activity = arrayOfNulls<Activity>(1)
        val activities: Collection<Activity> = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED)
        activity[0] = Iterables.getOnlyElement(activities)
        return activity[0]
    }
}
导入androidx.test.espresso.IdlingPolicies
导入androidx.test.espresso.IdlingRegistry
导入com.jakewharton.espresso.OkHttp3IdlingResource
导入com.kasikorn.retail.mbanking.kplus.basemodule.AppModule
导入com.kasikorn.retail.mbanking.kplus.util.OkHttpProvider
导入org.junit.rules.TestRule
导入org.junit.runner.Description
导入org.junit.runners.model.Statement
导入java.util.concurrent.TimeUnit
/**
*TestRule类帮助设置IdlingResource
*/
类CustomIdlingResTestRule:TestRule{
受保护的var mIdlingResource:CustomIdlingResource=CustomIdlingResource()
val idlingresourcecokhttp:OkHttp3IdlingResource by lazy{
OkHttp3IdlingResource.create(AppModule.APP_上下文,OkHttpProvider.getOkHttpInstance())
}
覆盖应用(基:语句?,描述:描述?:语句){
返回对象:语句(){
重写{
IdlingPolicys.setMasterPolicyTimeout(60,时间单位:秒)
IdlingPolicys.setIdlingResourceTimeout(26,时间单位。秒)
IdlingRegistry.getInstance().register(IdlingResourceCeOkhttp,mIdlingResource)
//注意:使用try-cache忽略UI测试失败
试一试{
base?.evaluate()
}捕获(e:可丢弃){
e、 printStackTrace()
}
IdlingRegistry.getInstance().unregister(IdlingResourceCeOkhttp,mIdlingResource)
}
}
}
}
导入android.app.Activity
导入android.util.Log
导入androidx.test.espresso.IdlingResource
导入androidx.test.espresso.core.internal.deps.guava.collect.Iterables
导入androidx.test.runner.lifecycle.ActivityLifecycleMonitorRegistry
导入androidx.test.runner.lifecycle.Stage
类CustomIdlingResource():IdlingResource{
私有变量mIsIdle=false
私有变量resourceCallback:IdlingResource.resourceCallback?=null
override fun getName():String=this.javaClass.simpleName
重写isIdleNow():布尔值{
如果(mIsIdle)返回true
val currentActivity=getCurrentActivity()
Log.d(“Log”,this.javaClass.simpleName+“|isIdleNow()|currentActivity:$currentActivity”)
如果(currentActivity!=null){
mIsIdle=true
resourceCallback?.onTransitionToIdle()
}
返回错误怠速
}
重写fun registerIdleTransitionCallback(回调:IdlingResource.ResourceCallback?){
this.resourceCallback=callback
}
私人娱乐getCurrentActivity():活动{
val活动=arrayOfNulls(1)
val活动:Collection=ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.recovered)
活动[0]=Iterables.getOnlyElement(活动)
返回活动[0]
}
}

这个解决方案适合我。 将此代码添加到UI测试类:

// Use this TestRule to setup IdlingResource
@Rule
@JvmField
val mIdlingResourceTestRule = CustomIdlingResTestRule()
这是CustomIdlingResTestRule的代码:

import androidx.test.espresso.IdlingPolicies
import androidx.test.espresso.IdlingRegistry
import com.jakewharton.espresso.OkHttp3IdlingResource
import com.kasikorn.retail.mbanking.kplus.basemodule.AppModule
import com.kasikorn.retail.mbanking.kplus.util.OkHttpProvider
import org.junit.rules.TestRule
import org.junit.runner.Description
import org.junit.runners.model.Statement
import java.util.concurrent.TimeUnit

/**
 * TestRule class help to setup IdlingResource
 */
class CustomIdlingResTestRule : TestRule {
    protected var mIdlingResource: CustomIdlingResource = CustomIdlingResource()

    val idlingResourceOkHttp: OkHttp3IdlingResource by lazy {
        OkHttp3IdlingResource.create(AppModule.APP_CONTEXT, OkHttpProvider.getOkHttpInstance())
    }

    override fun apply(base: Statement?, description: Description?): Statement {
        return object : Statement() {
            override fun evaluate() {
                IdlingPolicies.setMasterPolicyTimeout(60, TimeUnit.SECONDS)
                IdlingPolicies.setIdlingResourceTimeout(26, TimeUnit.SECONDS)
                IdlingRegistry.getInstance().register(idlingResourceOkHttp, mIdlingResource)
                //NOTE: use try cache to ignore UI Test Failures
                try {
                    base?.evaluate()
                } catch (e: Throwable) {
                    e.printStackTrace()
                }

                IdlingRegistry.getInstance().unregister(idlingResourceOkHttp, mIdlingResource)
            }

        }
    }
}

import android.app.Activity
import android.util.Log
import androidx.test.espresso.IdlingResource
import androidx.test.espresso.core.internal.deps.guava.collect.Iterables
import androidx.test.runner.lifecycle.ActivityLifecycleMonitorRegistry
import androidx.test.runner.lifecycle.Stage

class CustomIdlingResource() : IdlingResource {
    private var mIsIdle = false
    private var resourceCallback: IdlingResource.ResourceCallback? = null

    override fun getName(): String = this.javaClass.simpleName

    override fun isIdleNow(): Boolean {
        if (mIsIdle) return true
        val currentActivity = getCurrentActivity()
        Log.d("LOG", this.javaClass.simpleName + " | isIdleNow() | currentActivity: $currentActivity")
        if (currentActivity != null) {
            mIsIdle = true
            resourceCallback?.onTransitionToIdle()
        }
        return mIsIdle
    }

    override fun registerIdleTransitionCallback(callback: IdlingResource.ResourceCallback?) {
        this.resourceCallback = callback
    }

    private fun getCurrentActivity(): Activity? {
        val activity = arrayOfNulls<Activity>(1)
        val activities: Collection<Activity> = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED)
        activity[0] = Iterables.getOnlyElement(activities)
        return activity[0]
    }
}
导入androidx.test.espresso.IdlingPolicies
导入androidx.test.espresso.IdlingRegistry
导入com.jakewharton.espresso.OkHttp3IdlingResource
导入com.kasikorn.retail.mbanking.kplus.basemodule.AppModule
导入com.kasikorn.retail.mbanking.kplus.util.OkHttpProvider
导入org.junit.rules.TestRule
导入org.junit.runner.Description
导入org.junit.runners.model.Statement
导入java.util.concurrent.TimeUnit
/**
*TestRule类帮助设置IdlingResource
*/
类CustomIdlingResTestRule:TestRule{
受保护的var mIdlingResource:CustomIdlingResource=CustomIdlingResource()
val idlingresourcecokhttp:OkHttp3IdlingResource by lazy{
OkHttp3IdlingResource.create(AppModule.APP_上下文,OkHttpProvider.getOkHttpInstance())
}
覆盖应用(基:语句?,描述:描述?:语句){
返回对象:语句(){
重写{
IdlingPolicys.setMasterPolicyTimeout(60,时间单位:秒)
IdlingPolicys.setIdlingResourceTimeout(26,时间单位。秒)
IdlingRegistry.getInstance().register(IdlingResourceCeOkhttp,mIdlingResource)
//注意:使用try-cache忽略UI测试失败
试一试{
base?.evaluate()
}捕获(e:可丢弃){
e、 printStackTrace()
}
IdlingRegistry.getInstance().unregister(IdlingResourceCeOkhttp,mIdlingResource)
}
}
}
}
导入android.app.Activity
导入android.util.Log
导入androidx.test.espresso.IdlingResource
导入androidx.test.espresso.core.internal.deps.guava.collect.Iterables
导入androidx.test.runner.lifecycle.ActivityLifecycleMonitorRegistry
导入androidx.test.runner.lifecycle.Stage
类CustomIdlingResource():IdlingReso