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]
。也许其中一个函数会重置列表
然而,对于单元测试来说,这是一个非常糟糕的设计。通过这种方式,您可以设计两个测试之间的耦合。因此,如果不运行第一个测试,就永远不能运行第二个测试,那么您如何确保测试的运行顺序
因此,请编写一些实用函数,用一些包含预期值的存根填充每个测试中的umoduleInfo
关于如何进行测试的一个很好的来源是这本书。您确定它不仅仅是为每个测试创建测试类的新实例吗?对我来说,这似乎是相当合理的行为——一个测试不应该依赖于已经执行的其他测试。看起来你应该改用
[SetUp]
。这可能是个愚蠢的问题,但是每个测试是否都会执行_moduleInfo=new List。。。分配测试可以以任何顺序运行,因此如果您希望它持久化,最好在定义中执行,而不是在测试中执行。感谢阅读-我添加了一些更新的注释。我也尝试过这样做,只在类中声明变量,而不是在方法中声明变量-结果相同。这很有意义。我将尝试[Setup]方法,看看效果如何。干杯