在代码中使用单元测试变量时,变为null

时间:2014-03-26 21:06:34

标签: c# unit-testing

这是我第一次在C#中编写单元测试,我正在为其他人的代码编写单元测试。所以请回答好。在单元测试中,我调用跟踪器类并将电压变量ctp.Voltagel(它是公共的)设置为1.当我运行测试时,变量变为null。我不确定为什么变量的状态不会停留在1.任何想法为什么?这是我的代码。在tracerCtrl的构造函数中,TracerParameters tp被声明为private。所以我无法从单元测试中访问它。我需要在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代码

        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;
        }
    }

2 个答案:

答案 0 :(得分:1)

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

右键点击tp中的processData,然后点击&#34;转到声明&#34;看看变量实际来自哪里。然后确保设置正确的变量。

答案 1 :(得分:0)

您似乎实例化tp但从未将其绑定到tracerCtrl。您可能需要执行类似

的操作
tracerCtrl.Parameters = tp;

或者TracerCtrl有一个带TracerParameters个对象的构造函数,

tp = new tracerParameters();
tp.Voltagel = 1;
tracerCtrl = new TracerCtrl(tp);
编辑:之前没有注意到这一点,但我很好奇tp代码中TracerCtrl的定义。我希望if语句看起来更像:

if (channel == thisParameters.Voltagel)

如果Parameters确实存储了TracerCtrl个参数。

如果您使用有关TracerCtrl的更多信息更新您的问题,我很乐意修改。