Tag: unit testing

在kotlinunit testing中获得lambda捕获器的调用计数

我有这个小小的和平代码,我想在我的主持人(MVP) fun load(id: String) { storage.load(id, { result -> this.result = result view?.notifyLoaded(result) }, { string -> … }) } 。 我在我的unit testing用例中storage.load(String, (Result)->Unit, (String)->Unit) 。 `when`(storage.load(eq(testResult.id), any Unit>(), any Unit>())).thenAnswer({ invocation -> (invocation.getArgument(1) as? (Result) -> Unit)?.invoke(testResult) }) 现在我的测试案例看起来像这样 @Test fun testLoading() { /* Given */ … /* When */ presenterUnderTest.load(testResult.id) /* Then */ […]

如何获得测试覆盖或Jacoco为Kotlin数据类忽略

Jacoco显示Kotlin数据类别的覆盖率为0%。 如何配置它来衡量覆盖率或忽略数据类呢?

Kotlin / Java – 测试数据库数据提供的REST API

我试图测试一个连接到我的数据库,并试图配置一个模拟数据库。 我只是不知道如何。 如何使用任何测试框架来模拟数据库并测试我的方法(如下所示) getUserById ? 由于这是使用原始jdbc,我怎样才能覆盖这个getConnection()方法使用模拟数据库,而不是真正的? 还是不是这样的路? 我还没有测试过API的数据库连接/输出,所以我不知道从哪里开始。 这是我的jdbc类: import java.sql.Connection import java.sql.DriverManager import java.sql.ResultSet import java.sql.Statement import java.util.ArrayList import java.util.Properties import bye.domain.* class jdbcTrial { val url: String = “jdbc:postgresql://196.21.2.12:5432/events” //val props: Properties = Properties(); val DB_DRIVER = “org.postgresql.Driver”; // used for getting the comments fun getUserById(id: Int): User { val query = “select […]

@Rule>在Kotlin Junit测试中必须是公共的ValidationError

我试图使用unit testing规则注释,Android Studio没有突出显示任何错误: @Rule val htmlManager = HtmlManager() 然而在执行测试之后,发生以下错误: org.junit.internal.runners.rules.ValidationError:@Rule“htmlManager”必须是公共的。 如何解决这个问题?

使用kotlin lambda回调的unit testing场景

假设我们有以下function来测试 fun loadData(dataId: Long, completion: (JsonElement?, Exception?) -> Unit { underlayingApi.post(url = “some/rest/url”, completion = { rawResult, exception -> val processedResult = processJson(rawResult) completion(processedResult, exception) }) } 我很清楚如何模拟,注入,存根和validation对underlayingApi的调用。 我的问题是:代码如何看起来像validation通过completion(processedResult, exception)返回的结果completion(processedResult, exception) ?

使用mockito的Kotlin协同程序unit testing

当我尝试模拟和validation一个正在调用暂停function的活动时,我得到了下面的内容 错误: 论据是不同的! 通缉:userManager.getAccountInfo((onCreate_callsGetAccountInformation $ 1)kotlinx.coroutines.experimental.CoroutineScope。() – > kotlin.Unit); – > at com.pharmacy.AccountActivityTests $ onCreate_callsGetAccountInformation $ 1.doResume(AccountActivityTests.kt:117)实际的调用有不同的参数:userManager.getAccountInfo(()kotlinx.coroutines.experimental.CoroutineScope。() – > kotlin.Unit) – > at com.pharmacy.AccountActivity $ loadAccountInfoAsync $ 1 $ 1.doResume(AccountActivity.kt:199) 码: 我有我的unit testing用runBlocking装饰如下所示: @Test fun onCreate_callsGetAccountInformation() = runBlocking { whenever(userManager.getAccountInfo()).thenReturn(AccountInformation()) subject = Robolectric.setupActivity(AccountActivity::class.java) verify(userManager).getAccountInfo() } 这里 – > usermanager.getAccountInfo()是一个挂起的函数。

TestScheduler不起作用(Kotlin + RxJava2 + mockito)

我想写一个unit testing,将validation下面的callInit方法。 但是,我有空指针exception行保存subscribe( 。我的问题是我如何validation在下面的方法中的下一个和onerror条件? override fun callInit() { val requestInit = RequestInit(os = “android”, osVersion = deviceUtil.osVersion(), appVersion = deviceUtil.apiVersion()) compositeDisposable.add( interactor.getInit(requestInit) .subscribe( { view.hideProgress() this.commercialLink = it.commercialLink view.updateScreen() }, { error -> view.onError(error) } ) ) } 测试方法: @Test fun should_update_commerciallink_AND_updateScreen_when_callInit() { val request = RequestInit(“android”, “version”, “osversion”) val responseInit = ResponseInit(false, false, “updatelink”, […]

嘲笑kotlin中的伴侣对象函数

我正在使用PowerMock和Roboelectric,并且想要模拟一个类的伴侣对象函数。 当我这样做时,我得到一个错误: org.mockito.exceptions.misusing.MissingMethodInvocationException: when() requires an argument which has to be ‘a method call on a mock’. For example: when(mock.getArticles()).thenReturn(articles); 我所拥有的基本上是这样的: open class MockableClass private constructor(context: Context) { companion object { private val INSTANCE_LOCK = Any() private var sInstance: MockableClass? = null @JvmStatic fun getInstance(context: Context): MockableClass? { synchronized(INSTANCE_LOCK) { sInstance = (sInstance ?: MockableClass(context).let […]

Kotlin协同程序:测试Android Presenter时切换上下文

我最近在Android项目中开始使用kotlin协程,但是我有一些问题。 许多人会称之为代码味道。 我正在使用MVP架构,其中的协程在我的演示者中是这样开始的: // WorklistPresenter.kt … override fun loadWorklist() { … launchAsync { mViewModel.getWorklist() } … launchAsync函数以这种方式实现(在我的WorklistPresenter类扩展的BasePresenter类中): @Synchronized protected fun launchAsync(block: suspend CoroutineScope.() -> Unit): Job { return launch(UI) { block() } } 这个问题是,我正在使用依赖于Android框架的UI协程上下文。 我无法将其更改为另一个协程上下文,而无需运行ViewRootImpl$CalledFromWrongThreadException 。 为了能够unit testing,我创建了一个具有不同的launchAsync实现的launchAsync : protected fun launchAsync(block: suspend CoroutineScope.() -> Unit): Job { runBlocking { block() } return mock() } […]

Kotlin协同工具使用生产和mockito来嘲笑生产工作

我在我的Android应用程序中测试Kotlin协同程序,我正在尝试执行以下unit testing @Test fun `When getVenues success calls explore venues net controller and forwards result to listener`() = runBlocking { val near = “Barcelona” val result = buildMockVenues() val producerJob = produce<List>(coroutineContext) { result.value } whenever(venuesRepository.getVenues(eq(near))) doReturn producerJob // produce corooutine called inside interactor.getVenues(..) interactor.getVenues(near, success, error) // call to real method verify(venuesRepository).getVenues(eq(near)) verify(success).invoke(argThat { […]