unit-testing - Kotlin 测试预期 SingletonMap 但为 LinkedHashMap
问题描述
我是 Kotlin 和 Java 的新手,所以请耐心等待,但我刚刚编写了一个 Kotlin 测试,如下所示:
package com.squareup.cash.transactiongraph.service.actions
import com.squareup.cash.transactiongraph.TransactionGraphTestingModule
import com.squareup.cash.transactiongraph.client.franklin.FakeFranklinClient
import com.squareup.cash.transactiongraph.dataloader.DataLoaderRegistryFactory
import com.squareup.cash.transactiongraph.graphql.GraphQLContextFactory
import com.squareup.cash.transactiongraph.graphql.TransactionGraphContextFactory
import com.squareup.cash.transactiongraph.service.TransactionGraphGraphqlModule
import com.squareup.graphql.dataloaders.FlowDataLoaderDispatcher
import kotlinx.coroutines.future.await
import kotlinx.coroutines.runBlocking
import misk.testing.MiskTest
import misk.testing.MiskTestModule
import okhttp3.Headers
import org.junit.jupiter.api.Test
import org.assertj.core.api.Assertions.assertThat
@MiskTest(startService = true)
class CashCustomerTransactionsQueryTest {
@MiskTestModule
private val module = TransactionGraphTestingModule()
@Test
fun `returns an array of CashTransactions`() = runBlocking<Unit> {
val query = """
{
cashCustomerTransactions(customerToken: "customerToken") {
id
reasonCode
createdAt
}
}
""".trimIndent()
val result = execute(query)
assertThat(result["errors"]).isNull()
assertThat(result["data"]).isEqualTo(
mapOf(
"cashCustomerTransactions" to arrayOf(
mapOf(
"createdAt" to "2019-03-20T18:26:18Z",
"id" to "TOKEN",
"reasonCode" to "CARD_PRESENT_PURCHASE"
)
)
)
)
}
private suspend fun execute(query: String): Map<String, Any> {
val franklinClient = FakeFranklinClient()
val dataLoaderRegistryFactory = DataLoaderRegistryFactory()
val flowDataLoaderDispatcher = FlowDataLoaderDispatcher(dataLoaderRegistryFactory)
return flowDataLoaderDispatcher.run { registry ->
val contextFactory: GraphQLContextFactory =
TransactionGraphContextFactory(franklinClient)
TransactionGraphGraphqlModule().graphQL().executeAsync {
it
.query(query)
.context(contextFactory.build(Headers.Builder().build(), registry))
}.await().toSpecification()
}
}
}
运行测试时,它失败并出现以下错误:expected: "{"cashCustomerTransactions"=[{"createdAt"="2019-03-20T18:26:18Z", "id"="TOKEN", "reasonCode"="CARD_PRESENT_PURCHASE"}]} (SingletonMap@58303289)" but was: "{"cashCustomerTransactions"=[{"createdAt"="2019-03-20T18:26:18Z", "id"="TOKEN", "reasonCode"="CARD_PRESENT_PURCHASE"}]} (LinkedHashMap@c32f16d)"
除了一个是 SingletonMap 和一个是 LinkedHashMap 之外,以下响应似乎是相同的。我不明白为什么类型不同。我做错了什么?有人可以指出我正确的方向。谢谢
解决方案
更改arrayOf
为listOf
,问题将得到解决。
推荐阅读
- css - 动态css网格布局,保持一些元素在同一行
- c# - Ryzen 与 i7 多线程性能对比
- python - 在 for 循环中安排
- google-cloud-platform - 数据流:Apache Beam 警告:apache_beam.utils.retry:使用指数退避重试:
- ssl - openssl_encrypt():使用空的初始化向量 (iv) 可能不安全且不推荐错误 phpmyadmin
- r - 稀疏矩阵(非零)
- c# - 原图找不到部分图片
- assembly - 我不明白如何遍历数组
- r - 双精度和数字有什么区别?
- node.js - NodeJS 使用 absoluteURI 发送 http 请求