You need to enable JavaScript to run this app. C#中列表长度小于8时Stryker变异未被检测到问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

C#中列表长度小于8时Stryker变异未被检测到问题咨询

问题原因

数值8本身不存在任何特殊的C#底层机制,你遇到的变异存活问题本质是测试用例仅覆盖了单侧非法边界,没有覆盖全不等于判断的两类非法场景。

Stryker变异规则说明

针对不等于运算符!=,Stryker会生成两类典型变异:

  • 将a != b替换为a < b
  • 将a != b替换为a > b

你当前的Expects8TimestampBytes测试仅传入了长度为1(小于8)的字节列表,只能覆盖timestamp.Count < 8的非法场景:
如果Stryker将timestamp.Count !=8变异为timestamp.Count < 8,长度为1的测试用例依然会触发异常,测试运行通过,该变异就会被判定为存活。

而你测试长度≥9的timestamp时,覆盖了timestamp.Count >8的场景:此时如果变异为timestamp.Count <8,长度为9的参数不会触发异常,与测试预期的抛异常逻辑冲突,测试失败,该变异就会被杀死。

其他参数校验的变异可以被正常杀死,是因为你针对clockSequence(要求长度2)、node(要求长度6)的测试,已经同时覆盖了长度小于要求值、大于要求值的两类场景,所有变异都能被触发。

解决方案

补充一个传入长度大于8的timestamp字节列表的测试用例即可:

[Test]
public void Expects8TimestampBytes_WhenLengthGreaterThan8_ThrowsArgumentException()
{
    var timestampBytes = new List<byte>(new byte[9]);
    TestDelegate instanciation = () => ConcreteUuid.Constructor2(timestamp: timestampBytes);
    Assert.That(instanciation, Throws.ArgumentException);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 00:54:02