在Kotlin中,一个单元如何测试数据类、密封类或类字段没有更改



基本上我们可能会有一些类似的数据

open class RealmCart : RealmObject() {
@PrimaryKey
var _id: String = UUID.randomUUID().toString()
var items: RealmList<RealmCartItem> = RealmList()
var discountCode: String? = null
var userId: String = ""
}

我们不希望人们错误地编辑这些。我们在repo中有一些类似故障保护的代码所有者和标签,但我们也希望有一个单元测试,如果数据以任何方式更改(添加、更改或删除数据(,它也可以防止合并。基本上,我们不希望发生任何意外,人也不完美。

做这种事最好的办法是什么?

这就是我最终要做的:

我为我的数据模型创建了一个扩展功能

fun RealmObject.testDeclaredFields(): List<String> {
val fields = this::class.java.fields.map { it.name }
return this::class.java.declaredFields
.map { it.name }
.filterNot { fields.contains(it) }
.sorted()
}

基本上,这只是获取数据模型字段,不包括诸如伴随对象之类的内容。

然后我能够创建一个简单的测试,就像

class RealmMessageTest {
@Test
fun `RealmMessage fields match spec`() {
val item = RealmMessage().testDeclaredFields()
assertContentEquals(item, fieldSpec)
}
private val fieldSpec = listOf(
"_id",
"acknowledgeStatusValue",
"body",
"completed",
"createdAt",
"deliveryStatusValue",
"from",
"meta",
"organizationId",
"platforms",
"threadId",
"title"
).sorted()
}

为什么要这样做?有时,当有人不小心做出更改时,他们不会意识到他们已经在数据模型中添加了字段、更改了字段或删除了与后端同步的重要字段。这并不能阻止开发人员对其进行更改,但考虑到他们现在需要在两个地方进行更改,他们将更加清楚是否需要进行此更改。

我注意到很多人质疑你为什么要这么做。我的答案是,我在一个非常大的回购中工作,新的开发人员会不假思索地编辑它。这只是为了让他们在这些重要模型崩溃发展之前,更多地认识到这些模型的变化。回购有代码所有者,但他们可能并不总是看到这些变化。这只是一个额外的预防措施。

使用githooks这样的机制来阻止某些文件的编辑被提交怎么样
我不熟悉githooks,所以我无法向您展示具体的操作方法,但我认为最好阻止提交并通过错误消息通知开发人员。

最新更新