Android 集成机器人和黄瓜

Android 集成机器人和黄瓜,android,junit,cucumber,robolectric,cucumber-jvm,Android,Junit,Cucumber,Robolectric,Cucumber Jvm,我想结合机器人和黄瓜(JVM) 目前我有两个类ActivityStepdefs,其中定义了活动管理的两个步骤定义 我的第二个类是RoActivity,例如,其中一个活动是从它的类名创建的,并且将在其中使用Robolectric 当我使用RobolectrictTestRunner运行RoActivityTest时,该类中的测试通过,但当我运行RunCukeTest(运行特性的类作为junit测试)时,RoActivity中的代码未作为Robolectric的一部分运行,也就是说,RunCukes

我想结合机器人和黄瓜(JVM)

目前我有两个类
ActivityStepdefs
,其中定义了活动管理的两个步骤定义

我的第二个类是
RoActivity
,例如,其中一个活动是从它的类名创建的,并且将在其中使用Robolectric

当我使用
RobolectrictTestRunner
运行
RoActivityTest
时,该类中的测试通过,但当我运行
RunCukeTest
(运行特性的类作为junit测试)时,
RoActivity
中的代码未作为Robolectric的一部分运行,也就是说,
RunCukesTest
在我的项目中搜索功能,并将其与
ActivityStepdefs
中的方法相匹配,最后这个类将从
RoActivity
调用一个方法

可以同时使用junit和Twest*运行程序运行测试吗

我不确定,但也许可以使用junit规则执行类似powermock的操作

在这种情况下,我应该为哪一个定义规则

*黄瓜和机械分子

我的小5美分

Cucumber主要用于验收测试(如果用于单元测试,请纠正我的错误),Robolectric主要用于单元测试


对我来说,在TDD期间写cucumber太过分了。Robolectric还不是android,我会在真正的设备或至少是模拟器上运行验收测试。

我也面临同样的问题,在谷歌工作了一段时间后,我得到了一个解决方案:

@RunWith(ParameterizedRobolectricTestRunner::class)
@CucumberOptions( features = ["src/test/features/test.feature","src/test/features/others.feature"], plugin = ["pretty"])
class RunFeatures(val index: Int, val name:String) {

    companion object {
        @Parameters(name = "{1}")
        @JvmStatic
        fun features(): Collection<Array<Any>> {
            val runner = Cucumber(RunFeatures::class.java)
            Cucumber()
            val children = runner.children
            return children.mapIndexed{index, feature ->
                arrayOf(index,feature.name)
            }
        }
    }



    @Test
    fun runTest() {
        val core = JUnitCore()
        val feature = Cucumber(RunFeatures::class.java).children[index]!!
        core.addListener(object: RunListener() {
            override fun testFailure(failure: Failure?) {
                super.testFailure(failure)
                fail("$name failed:\n"+failure?.exception)
            }
        })
        val runner = Request.runner(feature)
        core.run(runner)
    }
}
@RunWith(ParameterizedRoboElectricTestRunner::class)
@CucumberOptions(功能=[“src/test/features/test.feature”,“src/test/features/others.feature”],插件=[“pretty”])
类RunFeatures(val索引:Int,val名称:String){
伴星{
@参数(name=“{1}”)
@JvmStatic
趣味功能():收藏{
val runner=Cucumber(RunFeatures::class.java)
黄瓜()
val children=runner.children
返回子项.mapIndexed{index,feature->
arrayOf(索引、特征、名称)
}
}
}
@试验
有趣的运行测试(){
val core=JUnitCore()
val feature=Cucumber(RunFeatures::class.java)。children[index]!!
addListener(对象:RunListener(){
覆盖有趣的测试失败(失败:失败?){
super.testFailure(失败)
失败($name失败:\n“+失败?。异常)
}
})
val runner=Request.runner(功能)
核心跑(跑步者)
}
}
但对我来说似乎不是一个很好的解决方案,有人能帮我解决这些问题吗:

  • 必须明确列出所有要素文件路径。但不能使用诸如*.feature之类的模式
  • 失败时,无法知道哪个步骤失败
  • 参数只能传递基元类型数据

  • 我已经进入cucumber源代码,但CucumberOptions内联cucumber,我无法通过编程传递它,只能使用注释。

    只是想知道您是否能够在这方面取得进展?我正在尝试做一些类似的事情,但仍在研究不同的可能性还没有,如果你愿意,我们可以一起尝试找到解决方案看看。这个repo允许您使用cucumber在Android上进行集成测试。我昨天写了这篇评论后不久就发现了它。我几乎让它运行得很好。如果我让它运行起来,我会把它写下来,作为对其他人的指导。如果你能在我之前运行它,我会鼓励你也这样做:p这个项目似乎是为了在模拟器上运行测试,而不是使用Robolectric。嗨,Axis,你找到了cucumber和Robolectric运行测试的解决方案吗?是的,是为了验收测试。当时我对在没有设备的情况下快速运行验收测试很感兴趣。你的解决方案是什么?我很好奇做同样的事情当你通过使用回答功能发布一个混合答案和一个问题时,你试图实现两件不同的事情——分享你的知识和征求建议。专家不会试图帮助您解决这3个问题,因为您并没有提出新的问题。请不要劫持旧问题而提出新问题。