标签: kotlin-allopen

适用于 android 的 Kotlin-allopen

是否可以使用 kotlin-allopen gradle 插件通过 mockito 进行 android 测试?

我尝试将 kotlin-allopen 插件添加到我的 build.gradle 并定义注释。

buildscript {
   ext.kotlin_version = '1.0.6'

   dependencies {
       classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
       classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
   }
}

apply plugin: 'com.android.application'
apply plugin: 'kotlin-allopen'
apply plugin: 'kotlin-android'

allOpen {
    annotation("com.mycompany.OpenForTest")
}
Run Code Online (Sandbox Code Playgroud)

而这些用于注释本身

annotation class OpenForTest
Run Code Online (Sandbox Code Playgroud)

它对我不起作用。也许我错过了什么?

android kotlin kotlin-allopen

6
推荐指数
1
解决办法
4401
查看次数

什么是开放财产?为什么我不能将其设置为私有?

Kotlin的财产和开放财产有什么区别?下面的代码抱怨我将setter 设为私有,而Intellij则说开放属性不允许私有 setter 。什么是开放财产?

@RestController
open class ParameterController {

  @Autowired
  lateinit var parameterRepository: ParameterRepository
    private set //error


}
Run Code Online (Sandbox Code Playgroud)

为什么上面的代码无效,但此代码有效?

open class ItemPrice{

    lateinit var type: String
        private set // ok

}
Run Code Online (Sandbox Code Playgroud)

编辑:我正在使用spring-allopen插件,并且将类显式标记为open没什么区别。

spring properties kotlin kotlin-allopen

6
推荐指数
1
解决办法
885
查看次数

Gradle 应用 kotlin-allopen 插件仅用于测试

我有一个使用 Kotlin 的 android 模块,通过使用 kotlin-all 开放类,我确保我仍然可以使用 Mockito 模拟我的 Kotlin 类。问题是这种方法使得我的 Kotlin 类也在测试之外开放,现在有人可以扩展这个类,但我不想允许。

这是我的配置

apply plugin: "kotlin-allopen"

allOpen {
    annotation("com.me.Open")
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来启用此插件仅用于测试,允许模拟 Kotlin 类,同时停止 Kotlin 非开放类的扩展。任何想法?

顺便说一句,我不想​​使用mockito-inline插件,因为它明显减慢了我们的测试速度。

android mockito gradle kotlin kotlin-allopen

6
推荐指数
0
解决办法
1318
查看次数

Kotlin-allopen插件+ @JvmField在val上不够最终

我在Kotlin下测试一个新的kotlin-allopenkotlin-spring插件1.0.6.

在我的一个@Transactional注释类中,我有一个字段:

@JvmField val foo = null
Run Code Online (Sandbox Code Playgroud)

当我尝试构建项目时,我得到:

Error:(45, 5) Kotlin: JvmField can only be applied to final property

有没有正确的方法来解决这个问题?@JvmField由于JUnit的原因,我需要现实代码@Rule.通过删除@JvmField和注释getter来管理"解决"问题.不确定是否有错误或功能.

kotlin kotlin-allopen

5
推荐指数
1
解决办法
794
查看次数

如何为 Android 启用 AllOpen 插件

我正在尝试为 android 添加allopen插件。

我把这个添加到我的build.gradle(.)

ext.kotlin_version = '1.3.61'

classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
Run Code Online (Sandbox Code Playgroud)

我把这个添加到我的app/build.gradle

apply plugin: 'kotlin-allopen'
apply plugin: 'io.fabric'

allOpen {
    annotation('com.myapp.sidemodule.Mockable')
}
Run Code Online (Sandbox Code Playgroud)

由于项目结构的原因,注释与属于 App 的模块位于不同的模块中

我在 sidemodule/debug/Mockable 中添加了这个

@Target(AnnotationTarget.ANNOTATION_CLASS)
annotation class Mockable
Run Code Online (Sandbox Code Playgroud)

然后在 sidemodule/debug/OpenClass 中

@Mockable
@Target(AnnotationTarget.CLASS)
annotation class OpenClass
Run Code Online (Sandbox Code Playgroud)

然后在 sidemodule/release/OpenClass 中

@Target(AnnotationTarget.CLASS)
annotation class OpenClass
Run Code Online (Sandbox Code Playgroud)

我添加 @OpenClass到了我注定要被嘲笑的班级但是,我仍然收到:

E/TestRunner: failed: testCanDetectBadResponse(com.myapp.test.core.SomeTests)
    ----- begin exception -----
    org.mockito.exceptions.base.MockitoException: 
    Cannot mock/spy class com.myapp.models.MyResponse
    Mockito cannot mock/spy because :
     - final class
        at com.nhaarman.mockitokotlin2.SpyingKt.spy(Spying.kt:52)
        at com.myapp.test.core.SomeTests.testCanDetectBadResponse(SomeTests.kt:163)
        at java.lang.reflect.Method.invoke(Native Method)
        at …
Run Code Online (Sandbox Code Playgroud)

android kotlin-allopen

5
推荐指数
1
解决办法
533
查看次数

标签 统计

kotlin-allopen ×5

kotlin ×4

android ×3

gradle ×1

mockito ×1

properties ×1

spring ×1