gpt4 book ai didi

android - 使用 Kotlin 数据类的 Json 解析器正确返回 json 数据,但是为什么解析器(MockK)的单元测试会失败?

转载 作者:行者123 更新时间:2023-12-04 13:29:04 25 4
gpt4 key购买 nike

我有一个非常简单的 JSON 解析器,它使用 Kotlin 数据类,并且运行良好。但是,当我尝试对解析器方法 (MockK) 进行单元测试时,断言失败,因为模型对象返回 NULL 值。我是 Kotlin 和 MockK 的新手,所以请帮我确定我哪里出错了。
用于此目的的所有文件/类如下所示:
数据.json {"name":"john","age":22,"subject":"engineering"} 解析器.kt

interface Parser {
fun parseJson(jsonObject: JSONObject)
}
学生.kt
data class Student(
var name: String? = null,
var age: Int? = null,
var subject: String? = null
) : Parser {

override fun parseJson(jsonObject: JSONObject) {
jsonObject?.let {
name = it.getString("name")
age = it.getInt("age")
subject = it.getString("subject")
}
}
}
MainActivity - 从 data.json 读取、解析并记录结果的简单方法
private fun readJson() {
val inputStream = (assets.open("data.json"))
val buffer = ByteArray(inputStream.available())
inputStream.read(buffer)
inputStream.close()
val jsonData = JSONObject(String(buffer, StandardCharsets.UTF_8))

val student = Student()
student.parseJson(jsonData)
Log.d("TAG", student.name + " " + student.age + " " + student.subject) // RETURNS CORRECT DATA
}
StudentTest.kt
class StudentTest {
private lateinit var student: Student

@Before
fun setUp() {
MockKAnnotations.init(this, relaxed = true)
student = Student()
}

@Test
fun `test parser`() {
student.parseJson(JSONObject(DATA))
assertEquals("mary", student.name) // ASSERTION FAILS - student.name returns NULL
}

private companion object {
const val DATA = "{\"name\":\"mary\",\"age\":21,\"subject\":\"history\"}"
}
}
任何帮助将不胜感激。
提前谢谢大家。

最佳答案

看来您实际上不需要模拟此测试。除非您问题中的代码不完整。
简化示例:

@Test
fun `test parser`() {
val student = Student()
student.parseJson(JSONObject("{\"name\":\"mary\",\"age\":21,\"subject\":\"history\"}"))
assertEquals("mary", student.name)
}
正如您的示例一样,这在名称上断言。创建 Student 的实例然后调用 parseJson用你的不可序列化的字符串。断言成功。
如果这不能回答您的问题,请改写和/或添加更好的示例。 :)

关于android - 使用 Kotlin 数据类的 Json 解析器正确返回 json 数据,但是为什么解析器(MockK)的单元测试会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66300973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com