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

JUnit测试JSON响应时触发AssertionError问题求助

排查Spring单元测试中AssertionError:预期空或null但得到"Debug"的问题

嘿,刚上手Spring单元测试就遇到这个小问题很正常,咱们一步步拆解来解决:

首先先把你遇到的错误信息摆出来,方便定位:

java.lang.AssertionError: Response content Expected: (null or an empty string) but: was "Debug"

这个错误已经说得很直白了——你的测试用例期望接口返回空字符串或者null,但实际接口返回了字符串"Debug",所以断言直接失败了。

问题根源拆解

1. 接口的实际行为

看你的PersonController代码,lastName接口的逻辑是:

  • 接收cid参数
  • 调用personService.findByCId(cid)拿到Person对象
  • 返回该对象的lastName属性

你测试时传的cid=123456,这说明personService.findByCId("123456")返回的Person对象,它的lastName值就是**"Debug"**——这是接口的真实返回结果,本身没问题。

2. 测试用例的矛盾点

你的测试方法名叫shouldReturnNonNullString(意思是应该返回非空字符串),但你写的断言却是:

.andExpect(content().string(isEmptyOrNullString()))

这完全是逻辑写反了!这个断言是在检查响应内容为空或者null,但你的接口明明返回了有效的"Debug"字符串,断言自然会失败。

解决方案

根据测试方法的命名,你应该是想验证接口能返回非空的字符串,所以把断言改成下面两种方式之一就行:

方式一:验证返回非空字符串

.andExpect(content().string(not(isEmptyOrNullString())))

方式二:如果知道预期返回值,直接断言具体内容

.andExpect(content().string("Debug"))

额外优化建议:Mock服务避免依赖真实数据

如果这是单元测试,建议用@MockBean来MockPersonService的行为,这样你可以完全控制返回值,不用依赖真实的数据库或者其他服务:

修改后的测试类示例:

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MvcLastNameTest {
    @Autowired
    private MockMvc mockMvc;
    
    // 用@MockBean来Mock PersonService
    @MockBean
    private PersonService personService;

    @Test
    public void shouldReturnNonNullString() throws Exception {
        // 预设:当传入cid=123456时,返回一个lastName为"TestLastName"的Person对象
        Person mockPerson = new Person();
        mockPerson.setLastName("TestLastName");
        when(personService.findByCId("123456")).thenReturn(mockPerson);

        this.mockMvc.perform(get("/person/lastName?cid=123456"))
                .andDo(print())
                .andExpect(status().isOk())
                // 断言返回预设的字符串
                .andExpect(content().string("TestLastName"));
    }
}

这样你的测试就不会受真实数据的影响,结果更稳定可控。

内容的提问来源于stack exchange,提问作者Mr Man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:03:16