我有一个非常简单的JSON解析器,它使用Kotlin数据类,并且工作非常完美。但是,当我尝试单元测试解析器方法(MockK)时,断言失败,因为模型对象返回空值。我对Kotlin和MockK都是新手,所以请帮我找出我的错误所在。
用于此目的的所有文件/类如下:
data.json {"name":"john","age":22,"subject":"engineering"}
parser.kt
interface Parser {
fun parseJson(jsonObject: JSONObject)
}Student.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\"}"
}
}任何帮助都将不胜感激。先谢谢大家。
发布于 2021-07-19 12:58:06
看来您实际上不需要对此测试进行嘲弄。除非你问题中的代码不完整。
简化示例:
@Test
fun `test parser`() {
val student = Student()
student.parseJson(JSONObject("{\"name\":\"mary\",\"age\":21,\"subject\":\"history\"}"))
assertEquals("mary", student.name)
}这是在名字上断言的,就像你的例子一样。创建一个Student实例,然后使用不可序列化的字符串调用parseJson。这个断言是成功的。
如果这不能回答你的问题,请重新措辞和/或添加一个更好的例子。:)
https://stackoverflow.com/questions/66300973
复制相似问题