使用koin-2.0.1进行Android测试,尽管每个测试分别通过,但无法同时测试所有3个测试。
<div id="map" tabindex="1"></div>
正在运行的类级别测试结果如下:
var interactions = ol.interaction.defaults({
onFocusOnly: true,
altShiftDragRotate: false,
pinchRotate: false,
doubleClickZoom: false,
pinchZoom: false,
dragZoom: false,
dragPan: false,
dragRotate: false,
mouseWheelZoom: false
});
new ol.Map({
target: "map"
interactions: interactions,
layers: [],
view: new ol.View({
center: ol.proj.transform([15.523, 49.718], 'EPSG:4326', 'EPSG:3857'),
zoom: 8,
minZoom: 7,
maxZoom: 18
})
});
任何输入都会有所帮助,谢谢。
答案 0 :(得分:2)
一种常见的做法是将@Before
设置与@After
清理配对。您可以在那里致电stopKoin()
,以便再次致电startKoin()
:
@After
fun tearDown() {
stopKoin()
}
答案 1 :(得分:1)
作为@After
方法的替代方法,您也可以使用AutoCloseKoinTest
。 As described in the docs:
扩展的Koin测试-嵌入自动关闭@after方法以在每次测试后关闭Koin
您可以扩展KoinTest
而不是扩展AutoCloseKoinTest
,它将为您做事后测试。
答案 2 :(得分:1)
解决此问题的另一种方法是,在您启动Koin的应用程序中覆盖onTerminate
override fun onTerminate() {
super.onTerminate()
stopKoin()
}
通过这种方式,您将不必使用AutoCloseKoinTest
或在@after
的每个类测试中将其关闭
答案 3 :(得分:0)
在@Before和@After方法上调用stopKoin(),如下所示:
import com.my.example.appModule
import android.os.Build
import androidx.test.core.app.ApplicationProvider
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.koin.android.ext.koin.androidContext
import org.koin.core.context.startKoin
import org.koin.core.context.stopKoin
import org.koin.test.KoinTest
import org.koin.test.inject
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
import java.util.*
@Config(sdk = [Build.VERSION_CODES.LOLLIPOP])
@RunWith(RobolectricTestRunner::class)
class SomeRepositoryTest: KoinTest {
// Return Completable of RxJava
private val repository: SomeRepository by inject()
@Before
fun before() {
stopKoin() // to remove 'A Koin Application has already been started'
startKoin {
androidContext(ApplicationProvider.getApplicationContext())
modules(appModule)
}
}
@After
fun after() {
stopKoin()
}
@Test
fun testSomething() {
repository.insert("data").blockingAwait()
assert(true)
}
}
答案 4 :(得分:0)
实施抽象的AutoCloseKoinTest类将在每次测试后自动停止Koin。
以下是Robolectric的示例:
@RunWith(RoboelectricTestRunner::class)
class MyTest : AutoCloseKoinTest() {
private val appContext = ApplicationProvider.getApplicationContext<APPNAME>()
@Before
fun setup() {
// use appContext as needed
}
}