数据库字段is_busy为true时,单元测试为何仍能通过?
兄弟,我帮你梳理几个最可能的原因,你可以挨个排查:
Employee类的equals方法没把is_busy算进去
你用Assert.assertEquals(expectedList, actualList)比较列表时,底层是逐个调用Employee对象的equals()方法判断是否相等。如果你的Employee类重写equals()时只考虑了id、姓名、年龄这些字段,完全漏掉了is_busy,那不管这个字段是true还是false,只要其他字段匹配,equals就会返回true,测试自然就通过了。接口返回的JSON里is_busy其实是false
别看数据库里存的是true,说不定业务逻辑在查数据的时候偷偷把这个字段改成false了(比如某些状态转换、过滤逻辑),或者在JSON序列化的时候把is_busy给忽略了(比如加了@JsonIgnore注解),导致返回的JSON里is_busy是false,刚好和你预期的一致。你可以在调试时直接打印EntityUtils.toString(response.getEntity())的内容,或者手动调用http://localhost:8087/employee接口,看看返回的JSON里is_busy到底是啥值。测试用的是另一个数据库
很多单元测试会用内存数据库(比如H2),和你平时查看的开发/生产数据库不是同一个。你看到的数据库里is_busy是true,但测试用的数据库里对应的员工数据is_busy其实是false,所以测试能顺利通过。可以去看看你的测试配置文件,确认下数据源是不是和你查看的数据库一致。
内容的提问来源于stack exchange,提问作者nhxkutex

