Android JUnit断言活动是接口的实现

Android JUnit断言活动是接口的实现,android,kotlin,junit,interface,delegates,Android,Kotlin,Junit,Interface,Delegates,我有一个Android活动,它实现了一个名为IMeetGroomDelegate的委托接口 接口代理{ 单击会议室片段的乐趣(homeFragment:MeetingRoomHomeFragment,meetingRoom:ParcelableMeetingRoomData) } 我希望始终确保我的活动始终是IMeetDelegate的实现 我怎么在Kotlin登记?到目前为止,我有以下几点: @RunWith(AndroidJUnit4::class) 类giventhemainactivi

我有一个Android活动,它实现了一个名为IMeetGroomDelegate的委托接口

接口代理{
单击会议室片段的乐趣(homeFragment:MeetingRoomHomeFragment,meetingRoom:ParcelableMeetingRoomData)
}
我希望始终确保我的活动始终是IMeetDelegate的实现

我怎么在Kotlin登记?到目前为止,我有以下几点:

@RunWith(AndroidJUnit4::class)
类giventhemainactivitys已加载{
@获取:规则
val activityRule=ActivityTestRule(MainActivity::class.java)
私有lateinit var mainActivity:mainActivity
@以前
趣味设置(){
this.mainActivity=activityRule.activity
}
@试验
有趣的是,还应该有一个临时会议室代表出席(){
assertTrue(实现接口(this.mainActivity::class.java))
}
私有有趣的实现接口(interf:Class):布尔值{
return interf是一个新的委托
}
}
我自己也试过看问题出在哪里,但测试者几乎没有透露任何实质性的信息

错误

java.lang.AssertionError
at org.junit.Assert.fail(Assert.java:86)
at org.junit.Assert.assertTrue(Assert.java:41)
at org.junit.Assert.assertTrue(Assert.java:52)
at activities.GivenTheMainActivityIsLoaded.thenThereShouldAlsoBeAnInstanceOfIMeetingRoomDelegatePresent(MainActivitySpec.kt:54)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80)
at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:527)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:104)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:392)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2189)

Tests ran to completion.

您可以使用具体化的泛型,而不是断言反射:

@测试
有趣的是,还应该有一个临时会议室代表出席(){
assertTrue(this.mainActivity.implementsInterface())
}
私有内联fun T.实现接口():布尔值{
return这是我的代理
}

它仍然在activities.giventhemainavitysloadded.org.junit.Assert.Assert.true(Assert.java:41)org.junit.Assert.Assert.assertTrue(Assert.java:52)org.junit.Assert.AssertionError处的org.junit.Assert.fail(Assert.java:86)处抛出相同的错误```java.lang.AssertionError。然后还应该在会议室DelegatePresent(MainActivitySpec.kt:54)处出现org.junit.runners.model.FrameworkMethod$1.runReflectVeCall(FrameworkMethod.java:50)org.junit.internal.runners.model.ReflectVeCallable.run(ReflectVeCallable.java:12)org.org.lang.ReflectVeCallable.invoke(本机方法)。``@MarcFreeman您能确认活动实现了接口吗,因为它对我来说工作正常!我可以100%确认活动实现了接口。我将把它作为另一个答案发布。为了澄清上述问题:
我在发布后1分钟内编辑了答案,OP可能不会更新他的浏览器,我只是在implementsInterface()中放入字符串,因为我正在用ide进行测试。
我还修改了答案,使其尽可能通用:inline fun T.implementsInterface():Boolean{return this is U}用法:assertTrue(this.mainActivity.implementsInterface())