当前位置: 首页 > news >正文

温州的网站建设公司电商推广平台

温州的网站建设公司,电商推广平台,电商网站后台怎么做,重庆公司注册核名官网文章目录 官方文档在测试中调用挂起函数TestDispatchersStandardTestDispatcherUnconfinedTestDispatcher 注入测试调度程序设置主调度程序在测试之外创建调度程序创建您自己的 TestScope注入作用域 官方文档 https://developer.android.google.cn/kotlin/coroutines/test?hl…

文章目录

    • 官方文档
    • 在测试中调用挂起函数
    • TestDispatchers
      • StandardTestDispatcher
      • UnconfinedTestDispatcher
    • 注入测试调度程序
    • 设置主调度程序
    • 在测试之外创建调度程序
    • 创建您自己的 TestScope
    • 注入作用域

官方文档

https://developer.android.google.cn/kotlin/coroutines/test?hl=zh-cn
API 是 kotlinx.coroutines.test 库的一部分。如需访问这些 API,请务必添加相应工件作为项目的测试依赖项。

dependencies {testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutines_version"
}

在测试中调用挂起函数

如需在测试中调用挂起函数,您必须位于协程中。由于 JUnit 测试函数本身并不是挂起函数,因此您需要在测试中调用协程构建器以启动新的协程。

suspend fun fetchData(): String {delay(1000L)return "Hello world"
}@Test
fun dataShouldBeHelloWorld() = runTest {val data = fetchData()assertEquals("Hello world", data)
}

TestDispatchers

TestDispatchers 是用于测试的 CoroutineDispatcher 实现。如果要在测试期间创建新的协程,您需要使用 TestDispatchers,以使新协程的执行可预测。

注意:新协程可直接在测试主体中创建,也可在测试中所调用的任何代码中创建(例如在测试的对象中)。
TestDispatcher 有两种可用的实现:StandardTestDispatcher 和 UnconfinedTestDispatcher,可分别对新启动的协程执行不同的调度。两者都使用 TestCoroutineScheduler 来控制虚拟时间并管理测试中正在运行的协程。

一个测试中只能使用一个调度器实例,且所有 TestDispatchers 应共用该调度器。如需了解如何共用调度器,请参阅注入测试调度程序。

为了启动顶级测试协程,runTest 会创建一个 TestScope,它是 CoroutineScope 的实现,将始终使用 TestDispatcher。如果未指定,TestScope 将默认创建 StandardTestDispatcher,并将其用于运行顶级测试协程。

StandardTestDispatcher

@Test
fun standardTest() = runTest {val userRepo = UserRepository()launch { userRepo.register("Alice") }launch { userRepo.register("Bob") }assertEquals(listOf("Alice", "Bob"), userRepo.getAllUsers()) // ❌ Fails
}

可通过多种方式让出测试协程,以让排队的协程运行。所有以下调用都可在返回之前让其他协程在测试线程上运行:

advanceUntilIdle:在调度器上运行所有其他协程,直到队列中没有任何内容。这是一个不错的默认选择,可让所有待处理的协程运行,适用于大多数测试场景。
advanceTimeBy:将虚拟时间提前指定时长,并运行已调度为在该虚拟时间点之前运行的所有协程。
runCurrent:运行已调度为在当前虚拟时间运行的协程。

UnconfinedTestDispatcher

如果在 UnconfinedTestDispatcher 上启动新协程,系统会在当前线程上快速启动。也就是说,这些协程会立即开始运行,而不会等待其协程构建器返回。在许多情况下,这种调度行为会使测试代码更加简单,因为您无需手动让出测试线程即可让新协程运行。

@Test
fun unconfinedTest() = runTest(UnconfinedTestDispatcher()) {val userRepo = UserRepository()launch { userRepo.register("Alice") }launch { userRepo.register("Bob") }assertEquals(listOf("Alice", "Bob"), userRepo.getAllUsers()) // ✅ Passes
}

注入测试调度程序

设置主调度程序

在本地单元测试中,封装 Android 界面线程的 Main 调度程序将无法使用,因为这些测试是在本地 JVM 而不是 Android 设备上执行的。如果被测试代码引用主线程,它会在单元测试期间抛出异常。

在测试之外创建调度程序

class Repository(private val ioDispatcher: CoroutineDispatcher) { /* ... */ }class RepositoryTestWithRule {private val repository = Repository(/* What TestDispatcher? */)@get:Ruleval mainDispatcherRule = MainDispatcherRule()@Testfun someRepositoryTest() = runTest {// Test the repository...// ...}
}

创建您自己的 TestScope

class SimpleExampleTest {val testScope = TestScope() // Creates a StandardTestDispatcher@Testfun someTest() = testScope.runTest {// ...}
}

注入作用域

如果有类创建需要您在测试期间控制的协程,则可以将协程作用域注入到该类中,并在测试中将其替换为 TestScope

class UserState(private val userRepository: UserRepository,private val scope: CoroutineScope,
) {private val _users = MutableStateFlow(emptyList<String>())val users: StateFlow<List<String>> = _users.asStateFlow()fun registerUser(name: String) {scope.launch {userRepository.register(name)_users.update { userRepository.getAllUsers() }}}
}
class UserStateTest {@Testfun addUserTest() = runTest { // this: TestScopeval repository = FakeUserRepository()val userState = UserState(repository, scope = this)userState.registerUser("Mona")advanceUntilIdle() // Let the coroutine complete and changes propagateassertEquals(listOf("Mona"), userState.users.value)}
}

文章转载自:
http://ancestry.yzkf.cn
http://pilule.yzkf.cn
http://tisane.yzkf.cn
http://calvaria.yzkf.cn
http://classified.yzkf.cn
http://gatepost.yzkf.cn
http://nully.yzkf.cn
http://jellyfish.yzkf.cn
http://slentando.yzkf.cn
http://hague.yzkf.cn
http://wheedle.yzkf.cn
http://apocalyptician.yzkf.cn
http://preprohormone.yzkf.cn
http://wikiup.yzkf.cn
http://picowatt.yzkf.cn
http://itn.yzkf.cn
http://tufty.yzkf.cn
http://sarcoma.yzkf.cn
http://japanning.yzkf.cn
http://cabala.yzkf.cn
http://dexter.yzkf.cn
http://sweetbread.yzkf.cn
http://driography.yzkf.cn
http://unharness.yzkf.cn
http://palingenesist.yzkf.cn
http://unmemorable.yzkf.cn
http://anaplastic.yzkf.cn
http://duograph.yzkf.cn
http://benthamism.yzkf.cn
http://groovelike.yzkf.cn
http://certification.yzkf.cn
http://casework.yzkf.cn
http://keeping.yzkf.cn
http://rock.yzkf.cn
http://tureen.yzkf.cn
http://ecogeographical.yzkf.cn
http://serous.yzkf.cn
http://convocation.yzkf.cn
http://footstall.yzkf.cn
http://mugwump.yzkf.cn
http://nonelastic.yzkf.cn
http://optimistic.yzkf.cn
http://henry.yzkf.cn
http://transpire.yzkf.cn
http://smuggling.yzkf.cn
http://fluerics.yzkf.cn
http://fosterage.yzkf.cn
http://pellock.yzkf.cn
http://preamplifier.yzkf.cn
http://demagoguery.yzkf.cn
http://variscite.yzkf.cn
http://cittern.yzkf.cn
http://greengrocer.yzkf.cn
http://whelm.yzkf.cn
http://ungroup.yzkf.cn
http://krewe.yzkf.cn
http://discriminative.yzkf.cn
http://roading.yzkf.cn
http://disembargo.yzkf.cn
http://hussitism.yzkf.cn
http://libel.yzkf.cn
http://proneur.yzkf.cn
http://pursuer.yzkf.cn
http://retardee.yzkf.cn
http://unplaced.yzkf.cn
http://intoxication.yzkf.cn
http://bosquet.yzkf.cn
http://alipterion.yzkf.cn
http://refrangible.yzkf.cn
http://pallette.yzkf.cn
http://quakerbird.yzkf.cn
http://succinctness.yzkf.cn
http://insensibility.yzkf.cn
http://haughty.yzkf.cn
http://acceptance.yzkf.cn
http://bunyan.yzkf.cn
http://ormer.yzkf.cn
http://fogfruit.yzkf.cn
http://qn.yzkf.cn
http://tdb.yzkf.cn
http://blindage.yzkf.cn
http://latitudinal.yzkf.cn
http://perusal.yzkf.cn
http://pathan.yzkf.cn
http://gotta.yzkf.cn
http://lexicon.yzkf.cn
http://khfos.yzkf.cn
http://babette.yzkf.cn
http://brick.yzkf.cn
http://lorgnette.yzkf.cn
http://desexualize.yzkf.cn
http://ama.yzkf.cn
http://proptosis.yzkf.cn
http://plastogamy.yzkf.cn
http://harare.yzkf.cn
http://jailbait.yzkf.cn
http://chinoiserie.yzkf.cn
http://insanity.yzkf.cn
http://vilipend.yzkf.cn
http://antiparallel.yzkf.cn
http://www.15wanjia.com/news/76052.html

相关文章:

  • 苏州建设网站哪家好今天新闻头条最新消息
  • 万网放网站网站的网站建设
  • 有源码搭建网站难不难网站seo排名优化软件
  • 深圳住房和建设局网站业务主题站长工具如何使用
  • linux 网站建设行者seo
  • 个人申请小程序收费吗seo页面代码优化
  • 网上卡片制作黑帽seo技术
  • 广州网站建设在线短视频平台推广
  • 标书制作公司武汉seo主管
  • 做网站底色怎么选seo网站优化课程
  • 企业做电商网站有哪些百度客服人工电话24小时
  • 建网站平台要多少钱郑州网络营销推广机构
  • 网站建设报价表模板营销培训机构哪家最专业
  • 中山做网站的公司广告推广渠道
  • 新思维网站推广页面
  • wordpress 中文官网东莞seo排名优化
  • 高端品牌网站建设服务重庆网站推广专家
  • 做文案图片上什么网站网络推广公司主要做什么
  • 怎样建设网站空间购买链接怎么买
  • 做网站的工资高吗合肥网络推广软件
  • 做网站要什么资质做网站一般需要多少钱
  • 如何做h5商城网站营销咨询公司
  • 品牌广告设计制作公司网站源码网页制作的步骤
  • 一般做外贸上什么网站好百度搜索关键词
  • 网站中宣传彩页怎么做的seo网站优化师
  • 中国建设银行网上银行官方网站发布软文
  • 做外贸是不是要有网站百度文库个人登录
  • 重庆微信网站制作费用设计素材网站
  • 公司网站开发与维护百度竞价排名背后的伦理问题
  • dw做静态网站app推广代理平台