|
|
@@ -229,9 +229,9 @@ class LsyOnboardingServiceTest {
|
|
|
* <p>{@link LeshouyingResponseParser} 的归一化**只走顶层**(不递归),这一点由它自己的
|
|
|
* javadoc 与 {@code parseV3_normalization_isTopLevelOnly_nestedJsonNullSurvives} 钉住,
|
|
|
* 那里还写着「谁要开始读嵌套字段,先回来把这里改成递归」—— 它只给了**改解析器**这一条路,
|
|
|
- * 而本 task 的边界不允许改(会动到 Task 1-4 与批次一全部路径)。本类是全模块第一个读嵌套
|
|
|
- * 字段的消费方,所以归一化补在读取处,重新评估的条件见
|
|
|
- * {@code LsyOnboardingService#toShopItems} 的 javadoc:
|
|
|
+ * 而本 task 的边界不允许改。本类是全模块第一个读嵌套字段的消费方,所以归一化补在读取处;
|
|
|
+ * 那条路**真实的作用面与重新评估条件只在**
|
|
|
+ * {@code LsyOnboardingService#toShopItems} 的 javadoc 里写了一次,此处不复述:
|
|
|
* {@code area_list[i].area_code} 的 JSON null 若按 {@code String.valueOf} 走,
|
|
|
* 得到的是**字符串** {@code "null"}(实测,见解析器 javadoc),
|
|
|
* 那会被当成一个真实的区划编码继续传给上游(三级联动的下一跳 parent_code)。
|
|
|
@@ -637,10 +637,12 @@ class LsyOnboardingServiceTest {
|
|
|
* + DTO 的五个。空白的三种形态({@code null} / 空串 / 全空格)逐个试,因为
|
|
|
* 「漏了其中一个」正是这条要防的形态。
|
|
|
*
|
|
|
- * <p>★ 本用例**一次都不打桩**(整个方法里不出现 {@code stubUpstream}):
|
|
|
- * {@code verifyNoInteractions} 的前提就是「这条用例没打过桩」。
|
|
|
+ * <p>★ 本用例**一次都不打桩**(整个方法里不出现 {@code stubUpstream})—— 这是本类的纪律,
|
|
|
+ * **不是** {@code verifyNoInteractions} 的前提:那条断言的前提只是「这个 mock 上零**交互**」,
|
|
|
+ * 而**打桩本身不算交互**(Mockito 的 invocation 列表里不记桩)。「只打桩、没真调用」不会让它红。
|
|
|
* (Mockito 的严格桩检查会把「打了桩却没人用」也判成失败 —— 但那**不是**本断言,
|
|
|
- * 两者不要混为一谈。)
|
|
|
+ * 两者不要混为一谈:那种红落在扩展收尾阶段,此时测试体已跑完、上面那行断言早已通过,
|
|
|
+ * 别顺着它的报错去怀疑 {@code verifyNoInteractions}。)
|
|
|
*/
|
|
|
@Test
|
|
|
void createShop_blankRequiredField_throws400() {
|