Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 丢失委托值字段_C#_Delegates_Closures - Fatal编程技术网

C# 丢失委托值字段

C# 丢失委托值字段,c#,delegates,closures,C#,Delegates,Closures,我想知道这里发生了什么。我正在为异步远程处理代码编写一些单元测试 // a global variable to all unit tests in the class private List<ModuleInfo> _moduleInfo; [TestMethod] public void MyFunction() { _moduleInfo = new List<ModuleInfo>();

我想知道这里发生了什么。我正在为异步远程处理代码编写一些单元测试

    // a global variable to all unit tests in the class
    private List<ModuleInfo> _moduleInfo;

    [TestMethod]
    public void MyFunction()
    {
           _moduleInfo = new List<ModuleInfo>();

            netCall.MessageRecieved +=
                    delegate(object sender, MessageTestRecievedEventArgs e)
                    {
                       // I get a correct response - array of Modules
                       // then try to add to global variable
                       foreach (EducateMe.Shared.Types.ModuleInfo mIn in arr)
                       {
                           _moduleInfo.Add(mIn);
                       }
                    }

    }
//类中所有单元测试的全局变量
私有列表_moduleInfo;
[测试方法]
公共函数()
{
_moduleInfo=新列表();
netCall.messagereceived+=
委托(对象发送者,MessageTestReceiveDeventargs e)
{
//我得到了正确的响应-模块阵列
//然后尝试添加到全局变量
foreach(arr中的EducateMe.Shared.Types.ModuleInfo最小值)
{
_模块信息添加(最小值);
}
}
}
//因此,在循环之后,变量_moduleInfocount=9 //下一个运行的测试变量是空的-所以当它离开闭包时,它会以某种方式重置-我如何在测试之间保留这个值

更新-

这就是数组的定义方式。没有使用[设置]或[拆卸]

[TestClass]
public class MyUnitTest
{
  private List<ModuleInfo> _moduleInfo;

  // then the function definition

}
[TestClass]
公共类MyUnitTest
{
私有列表_moduleInfo;
//然后是函数定义
}
第二个单元测试只是尝试读取循环创建的值。所以MyFunction()测试可以顺利通过,但一旦退出闭包,变量就消失了

干杯

这是VS创建的单元测试附带的

    private TestContext testContextInstance;

    /// <summary>
    ///Gets or sets the test context which provides
    ///information about and functionality for the current test run.
    ///</summary>
    public TestContext TestContext
    {
        get
        {
            return testContextInstance;
        }
        set
        {
            testContextInstance = value;
        }
    }
私有TestContext testContextInstance;
/// 
///获取或设置提供
///有关当前测试运行的信息和功能。
///
公共TestContext TestContext
{
收到
{
返回testContextInstance;
}
设置
{
testContextInstance=值;
}
}

不知道您正在使用哪个测试框架,但在NUnit中有一些方法可以具有属性
[Setup]
[TearDown]
。也许其中一个函数会重置列表

然而,对于单元测试来说,这是一个非常糟糕的设计。通过这种方式,您可以设计两个测试之间的耦合。因此,如果不运行第一个测试,就永远不能运行第二个测试,那么您如何确保测试的运行顺序

因此,请编写一些实用函数,用一些包含预期值的存根填充每个测试中的u
moduleInfo


关于如何进行测试的一个很好的来源是这本书。

您确定它不仅仅是为每个测试创建测试类的新实例吗?对我来说,这似乎是相当合理的行为——一个测试不应该依赖于已经执行的其他测试。看起来你应该改用
[SetUp]

这可能是个愚蠢的问题,但是每个测试是否都会执行_moduleInfo=new List。。。分配测试可以以任何顺序运行,因此如果您希望它持久化,最好在定义中执行,而不是在测试中执行。感谢阅读-我添加了一些更新的注释。我也尝试过这样做,只在类中声明变量,而不是在方法中声明变量-结果相同。这很有意义。我将尝试[Setup]方法,看看效果如何。干杯