反序列化的 JSON 物件就是這種格式。
{
"myTypes":["type-1","type-2"...]
}
解串器類如下。
class MyDeserializer: StdDeserializer<MyType>( MyType::class.java) {
override fun deserialize(jsonPareser: JsonParser?, dctx: DeserializationContext?): MyType? {
val node: JsonNode = jsonPareser?.codec?.readTree(jsonPareser) ?: return null
return try {
MyType.valueOf(node.textValue().uppercase().replace('-','_'))
}catch (e : IllegalArgumentException){
null
}
}
我已經撰寫了大部分測驗,但無法弄清楚在提到的部分中要做什么。
class MyTypeDeserializerTest {
@BeforeEach
fun init() {
MockKAnnotations.init(this)
}
@ParameterizedTest(name = "given string \"{0}\" is valid: \"{1}\"")
@MethodSource("tests")
fun `check different parameters`(string: String, myType: MyType) {
val myTypeDeserializer = MyTypeDeserializer()
val deserialisedType= myTypeDeserializer.deserialize(<what do I put here?>)
Assertions.assertEquals(myType, deserialisedType)
}
private companion object {
@JvmStatic
fun tests() = Stream.of(
Arguments.of(String.format(<josn>), expectedType),
)
}
}
幫助將不勝感激
uj5u.com熱心網友回復:
您可以進行某種集成測驗來測驗您的代碼。
@ParameterizedTest(name = "given string \"{0}\" is valid: \"{1}\"")
@MethodSource("tests")
fun `check different parameters`(string: String, myType: MyType) {
// create a jackson object mapper instance and register your own deserializer
val mapper = ObjectMapper().registerKotlinModule().registerModule(SimpleModule().apply {
addDeserializer(MyType::class.java, MyDeserializer())
})
// read the serialized string into an object using your deserializer
Assertions.assertEquals(myType, mapper.readValue<MyType>(string))
}
該示例假設jackson-module-kotlin( Maven Repository ) 在類路徑中可用。或者,您應該使用mapper.readValue(serialized, MyType::class.java)反序列化您的 json,并且應該跳過添加registerKotlinModule()到物件映射器構建器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/488715.html
上一篇:模擬TableClientDeleteEntityAsync-Azure.Response
下一篇:失敗:單元測驗角度錯誤
