|
@@ -1604,14 +1604,25 @@ class LsyOnboardingServiceTest {
|
|
|
* <p>★ 断言是把文案里「:」之后的清单**按「、」切回来**再比(数量与集合都相等 ⇒ 多重集相等),
|
|
* <p>★ 断言是把文案里「:」之后的清单**按「、」切回来**再比(数量与集合都相等 ⇒ 多重集相等),
|
|
|
* 所以这个数组的**排列不参与断言** —— 排成矩阵声明顺序只为读起来能跟那张表逐行对照。
|
|
* 所以这个数组的**排列不参与断言** —— 排成矩阵声明顺序只为读起来能跟那张表逐行对照。
|
|
|
*
|
|
*
|
|
|
- * <p>★ 修复轮 1(F1)之前这里用的是逐条 {@code contains},那是**恒真**的:
|
|
|
|
|
- * 数组里「商户签约负责人」是「商户签约负责人电话 / 邮箱」的前缀,改掉前者那条标签文案,
|
|
|
|
|
- * 后两条自己就把前缀带出来了。切分之后「少一个 / 多一个 / 串一个 / 一条是另一条的前缀」
|
|
|
|
|
- * 才会红 —— 这正是一条是另一条前缀时 {@code contains} 唯一抓不到的情形。
|
|
|
|
|
|
|
+ * <p>★ 修复轮 1(F1)之前这里用的是逐条 {@code contains}:它只问「期望标签在不在文案里」,
|
|
|
|
|
+ * 不问「文案里那一段是不是正好就是期望标签」⇒ 只要每个期望标签都被文案**包成子串**,
|
|
|
|
|
+ * 这一组断言(26 条 {@code contains})就全过。F1 踩的正是这个坑:数组里「商户签约负责人」是
|
|
|
|
|
+ * 「商户签约负责人电话 / 邮箱」的前缀,把前者那条标签文案改掉时,后两条自己就把这个前缀带出来了
|
|
|
|
|
+ * (实测:把 production 里 contact_name 那条标签改成「签约负责人」,旧断言下本类 57 条全绿)。
|
|
|
|
|
+ * ★ 「一条是另一条的前缀」**不是** {@code contains} 唯一放过的一种 —— 它只是**这一类**里的一个成因:
|
|
|
|
|
+ * 凡是**改了标签文案、却让每个期望标签仍然原样留在文案里**的改动,这组断言都放过 —— 把某条
|
|
|
|
|
+ * **标签**改长({@code 商户客服电话} → {@code 商户客服电话(座机或手机)})或给它**加尾巴**
|
|
|
|
|
+ * 同样如此。换成「按顿号切回来、数量与集合都比」之后,这一类就都红了。
|
|
|
*
|
|
*
|
|
|
* <p>★ 切分这个判据的两个前提(改本数组或改文案构造时要一起看):① 标签里不含顿号「、」
|
|
* <p>★ 切分这个判据的两个前提(改本数组或改文案构造时要一起看):① 标签里不含顿号「、」
|
|
|
* (用例里有断言,含了就红);② 文案的构造是「进件必填项缺失(共 N 项):」+
|
|
* (用例里有断言,含了就红);② 文案的构造是「进件必填项缺失(共 N 项):」+
|
|
|
* {@code String.join("、", labels)}({@code LsyOnboardingService} 必填缺失那一支)。
|
|
* {@code String.join("、", labels)}({@code LsyOnboardingService} 必填缺失那一支)。
|
|
|
|
|
+ * ★ 代价:这个判据对**文案外形的改变**会**假红,而且失败信息指错方向** —— 给清单加一句尾巴
|
|
|
|
|
+ * (例:{@code ……对私账户身份证反面照片。请补全后重试})时 26 个标签一个不缺,红的却是
|
|
|
|
|
+ * 「标签清单必须与期望的 26 个逐字相同」;同族还有 {@code ):} 后加空格(首项多一个前导空格)、
|
|
|
|
|
+ * 前缀改写引入**更早**的冒号({@code labelsIn} 切在第一个「:」上,切出来的位置就变了)。
|
|
|
|
|
+ * 这是**取舍不是疏忽**:要让它对尾巴钝感,就得放弃「数量相等」这一半 —— 而「多一个」与
|
|
|
|
|
+ * 「26 个都在、另有一个重复」这两种恰好只有数量能抓(集合相等时它们仍然不同)。
|
|
|
*/
|
|
*/
|
|
|
private static final String[] MERCHANT_MICRO_MISSING_LABELS = {
|
|
private static final String[] MERCHANT_MICRO_MISSING_LABELS = {
|
|
|
"商户名称",
|
|
"商户名称",
|
|
@@ -1706,9 +1717,11 @@ class LsyOnboardingServiceTest {
|
|
|
* <li>★ **两个键都在、都是非空、且值不同** ⇒ 取到的是 {@code merchant_no} 那个。</li>
|
|
* <li>★ **两个键都在、都是非空、且值不同** ⇒ 取到的是 {@code merchant_no} 那个。</li>
|
|
|
* </ol>
|
|
* </ol>
|
|
|
*
|
|
*
|
|
|
- * <p>★★ 第 4 个子场景是**未决语义下的现状钉子**,不是设计决策:spec §6.2(c) 的立场是两个键
|
|
|
|
|
- * **本该是同义别名**(返回参数表写一个、返回示例写另一个),正常只会有一个有值;
|
|
|
|
|
- * 真出现「两个都有值且不同」时哪个算数**当前没有依据** —— 联调跑一次之前不猜。
|
|
|
|
|
|
|
+ * <p>★★ 第 4 个子场景是**未决语义下的现状钉子**,不是设计决策:spec §6.2(c) 说的**观察**是
|
|
|
|
|
+ * 「返回参数表写一个、返回示例写另一个」,它的**结论**是「创建成功后到底从哪个 key 取号,只有
|
|
|
|
|
+ * 真跑一次才知道」;「两个键**本该是同义别名**、正常只会有一个有值」是**我们的读法**(spec 里
|
|
|
|
|
+ * 没有这句),不是 spec 的立场。真出现「两个都有值且不同」时哪个算数**当前没有依据** ——
|
|
|
|
|
+ * 联调跑一次之前不猜。
|
|
|
* 所以这里把**现状**(服务端 {@code createMerchant} 先读 {@code merchant_no}、空白才回落
|
|
* 所以这里把**现状**(服务端 {@code createMerchant} 先读 {@code merchant_no}、空白才回落
|
|
|
* {@code shoubei_merchant_no})钉住:将来任何人改动那个优先级,这条断言都会红。
|
|
* {@code shoubei_merchant_no})钉住:将来任何人改动那个优先级,这条断言都会红。
|
|
|
* <b>语义裁定之后要改两处</b>:① 服务端取号那两行的先后;② 本用例第 4 个子场景的期望值
|
|
* <b>语义裁定之后要改两处</b>:① 服务端取号那两行的先后;② 本用例第 4 个子场景的期望值
|