You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单元测试:如何验证JSON解析器对接口方法的调用正确性

规范实现方案与行业标准

一、核心验证思路

这类场景的核心是验证解析器的路由逻辑正确性——即给定特定JSON输入,解析器是否能正确识别type字段,并调用对应接口方法,同时参数传递准确。行业里通用的方案是测试替身(Test Double)+ 断言验证,结合文件驱动测试覆盖多场景。

二、具体实现步骤

1. 编写测试替身(Mock实现)

实现SignalsInterface的测试类,记录方法调用状态(是否被调用、调用时的参数值):

class MockSignalsInterface : SignalsInterface {
    var method1Called = false
    var method1ReceivedLight: Boolean? = null
    var method2Called = false
    var method2ReceivedTime: Long? = null

    override fun method1(light: Boolean) {
        method1Called = true
        method1ReceivedLight = light
    }

    override fun method2(time: Long) {
        method2Called = true
        method2ReceivedTime = time
    }
}

2. 读取TXT文件中的JSON用例

编写工具方法读取TXT文件内容,可按场景拆分用例(比如每个JSON用例单独存一个文件,或单个文件用分隔符区分多个用例):

fun readJsonFromTxt(filePath: String): String {
    return File(filePath).readText(Charsets.UTF_8)
}

3. 执行测试并断言结果

针对每个JSON用例,初始化解析器和Mock接口,传入JSON后验证调用状态:

@Test
fun testMethod1Invocation() {
    val mockInterface = MockSignalsInterface()
    val parser = SignalParser(mockInterface)
    
    // 读取method1对应的JSON用例文件
    val json = readJsonFromTxt("testcases/method1_signal.txt")
    parser.parse(json)
    
    // 断言方法被调用且参数匹配
    assert(mockInterface.method1Called)
    assertEquals(false, mockInterface.method1ReceivedLight)
    assert(!mockInterface.method2Called)
}

@Test
fun testMethod2Invocation() {
    val mockInterface = MockSignalsInterface()
    val parser = SignalParser(mockInterface)
    
    val json = readJsonFromTxt("testcases/method2_signal.txt")
    parser.parse(json)
    
    assert(mockInterface.method2Called)
    assertEquals(12345L, mockInterface.method2ReceivedTime)
    assert(!mockInterface.method1Called)
}

三、行业标准实践

  • 使用成熟Mock框架:项目规模较大时,可替代自定义Mock类,比如Kotlin用MockK、Java用Mockito,能更便捷地验证方法调用次数、复杂参数匹配等场景。
  • 参数化测试:利用JUnit 5的@ParameterizedTest或TestNG的参数化特性,批量读取多个JSON用例文件,减少重复代码,覆盖更多边界场景(比如缺失参数、参数类型错误等异常情况)。
  • 契约测试:若解析器与接口实现跨服务/模块,可采用契约测试(如Pact),定义JSON输入与接口调用的契约,确保双方行为一致。
  • 输入验证前置:解析JSON前,通过JSON Schema验证输入格式合法性,避免非法输入导致的解析错误,这是行业通用的防御性编程实践。

内容的提问来源于stack exchange,提问作者Uriel Frankel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:20:36