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

单个测试通过批量运行失败:KeyenceExport类列表属性数据污染

测试间sequence_numbers数据污染的原因分析

这大概率是类静态属性复用或者实例属性初始化错误导致的,以下是具体场景和解决办法:

1. 最常见原因:sequence_numbers是类级静态属性

如果KeyenceExport中的sequence_numbers被声明为static,那么它属于类本身而非实例——不管你new多少个KeyenceExport对象,所有实例都会共享同一个列表内存地址。第一个测试往列表里添加的数据,会一直保留到第二个测试执行,自然会出现在新实例的sequence_numbers中。

错误代码示例:

public class KeyenceExport : IExport
{
    // 静态属性导致所有实例共享
    public static List<int> sequence_numbers = new List<int>();
}

2. 初始化逻辑错误:复用外部共享列表

如果sequence_numbers在构造时没有创建新的列表实例,而是引用了一个外部的共享集合(比如类外的静态列表、全局变量),同样会导致不同实例复用同一数据。

错误代码示例:

// 外部定义的共享列表
private static readonly List<int> _globalSequenceList = new List<int>();

public class KeyenceExport : IExport
{
    public List<int> sequence_numbers;

    public KeyenceExport()
    {
        // 直接引用共享列表,而非创建新实例
        sequence_numbers = _globalSequenceList;
    }
}

解决办法

  • 移除sequence_numbers的static修饰符,将其改为实例属性;
  • 在KeyenceExport的构造函数中,每次实例化都创建新的列表,确保每个实例拥有独立的集合:
public class KeyenceExport : IExport
{
    public List<int> sequence_numbers;

    public KeyenceExport()
    {
        // 每次实例化都初始化新列表
        sequence_numbers = new List<int>();
    }
}
  • 如果必须复用外部数据,在构造时创建列表的副本(比如sequence_numbers = new List<int>(_globalSequenceList)),避免直接引用原集合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:42:40