使用单元测试时,代码中的变量显示为空

本文关键字:变量 显示 代码 单元测试 | 更新日期: 2023-09-27 17:53:38

这是我第一次用c#写单元测试,我在别人的代码上写单元测试。所以请在回复中友好一点。在单元测试中,我调用跟踪器类并设置电压变量ctp。电压(它是公共的)到1。当我运行测试时,变量出现为null。我不知道为什么变量的状态不保持在1。知道为什么吗?这是我的代码。在tracerCtrl的构造函数中,TracerParameters tp被声明为私有的。所以我不能从单元测试中访问它。我需要在TracerParameters中设置它。

    [TestMethod]
    public void TestGetScanResultVoc()
    {
        TracerCtrl tracerCtrl;
        TracerParameters tp;
        int channel = 0;
        int dataSize = 500;
        int []data;
        data = new int[dataSize];
        int[] pyrn1Data = null;
        int result = 0;
        tracerCtrl = new TracerCtrl();
        tp = new tracerParameters();
        tp.Voltagel = 1;

        tracerCtrl.processData(data, dataSize, channel);
       }

tracerCtrl Code

        public void processData(int[] data, int dataSize, int channel)
    {
        int i = 0;
        if (channel == tp.Voltagel)  //tp.Voltagel I get null
        {
            pyrn1Data = new int[dataSize];
            pyrn1DataSize = dataSize;
            for (i = 0; i < dataSize; i++)
            {
                pyrn1Data[i] = data[i];
            }
            bGotPyrn1 = true;
        }
    }

使用单元测试时,代码中的变量显示为空

processData中的tp不能与TestGetScanResultVoc中的tp相同(这是一个局部变量,并且您不将其作为参数传递)。

右键单击processData中的tp,然后"转到声明"以查看该变量的实际来源。然后确保你设置了正确的变量

似乎您实例化了tp,但从未将其绑定到tracerCtrl。你可能需要做一些像

这样的事情
tracerCtrl.Parameters = tp;

或者如果TracerCtrl有一个接受TracerParameters对象的构造函数,

tp = new tracerParameters();
tp.Voltagel = 1;
tracerCtrl = new TracerCtrl(tp);

编辑:之前没有注意到这一点,但我很好奇tpTracerCtrl代码中的定义。我希望if语句看起来更像:

if (channel == thisParameters.Voltagel)

如果Parameters确实是TracerCtrl的参数存储的地方

如果你用TracerCtrl的更多信息更新你的问题,我很乐意修改