- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Kotlin
在 Android 中使用 Mockito
运行 Instrumentation
测试 (androidTest)
。
'org.mockito:mockito-core:3.3.3'
Kotlin
编写的,所以我有 org.mockito:mockito-inline:3.3.3
来解决最后的类问题。Android
中运行模拟,所以我的依赖项中也有 org.mockito:mockito-android:3.3.3
。但是在编译代码时出现以下错误
More than one file was found with OS independent path 'mockito-extensions/org.mockito.plugins.MockMaker'
这是重现问题的示例测试代码。将此测试作为 Instrumentation 测试运行。 (安卓测试)
。
主 Activity 测试
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
class Calculator {
fun add(x: Int, y: Int): Int {
return x + y
}
}
@RunWith(AndroidJUnit4::class)
class MainActivityTest {
@Mock
lateinit var calculator: Calculator
@Before
fun before() {
MockitoAnnotations.initMocks(this)
}
@Test
fun test() {
`when`(calculator.add(10, 10)).thenReturn(20)
assertEquals(calculator.add(10, 10), 20)
}
}
app/build.gradle
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-android-extensions'
}
android {
compileSdkVersion 29
defaultConfig {
applicationId "com.theapache64.mockitosample"
minSdkVersion 16
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
testOptions {
unitTests.returnDefaultValues = true
}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.2.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.13'
androidTestImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
androidTestImplementation 'org.mockito:mockito-core:3.3.3'
androidTestImplementation 'org.mockito:mockito-android:3.3.3'
androidTestImplementation 'org.mockito:mockito-inline:3.3.3'
}
是否可以使用 Kotlin
和 Mockito
运行 Android 仪器测试
?
注意:如果您认为这是一个重复的问题,我已经在整个互联网上进行了搜索。类似的堆栈跟踪还有其他问题,但我的情况不同。
任何帮助将不胜感激
最佳答案
我有同样的问题,我的解决方案是这个答案 https://stackoverflow.com/a/41594789/2286422 , - 即使用依赖于 Mockito 的 dexmaker 库。
删除其他 Mockito androidTestImplementation
依赖项,只添加以下一个(您可以找到最新版本 here ):
androidTestImplementation 'com.linkedin.dexmaker:dexmaker-mockito:2.28.1'
请注意,此解决方案仅适用于搭载 Android P 或更高版本 (official documentation) 的设备。
然后在实际测试中我按以下方式使用 Mockito:
@RunWith(MockitoJUnitRunner::class) // use Mockito runner to be able to use @Mock annotations
class MockitoTest {
@Mock
private lateinit var generalPref: GeneralPreferences
@Before
fun setup() {
// make setup
}
@After
@Throws(IOException::class) {
// make cleanup
}
@Test
fun testUser() {
val repo: UserLocalRepository =
UserLocalRepositoryImpl(generalPref) // generalPref is a mock
val user = repo.getUser()
Truth.assertThat(user).isNotNull()
}
}
关于android - Kotlin + MockIto + Android 插桩测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61421732/
我是一名优秀的程序员,十分优秀!