我试图了解这里发生的事情。我正在为asynch'd远程代码编写一些单元测试
// 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 count = 9 // next运行但是变量为空的测试 - 所以当它离开闭包时它会以某种方式重置 - 我怎样才能在测试之间保留这个值?
更新 -
这就是数组的定义方式。没有使用[Setup]或[TearDown]。
[TestClass]
public class MyUnitTest
{
private List<ModuleInfo> _moduleInfo;
// then the function definition
}
第二个单元测试只是尝试读取循环创建的值。所以MyFunction()测试传递正常,但一旦它退出闭包,变量就会消失。
干杯
PS。这是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;
}
}
答案 0 :(得分:0)
不知道您正在使用哪个测试框架,但在NUnit中有一些方法可以具有属性[Setup]
和[TearDown]
。也许其中一个函数会重置列表?
然而,对于单元测试来说,这是一个非常糟糕的设计。通过这种方式,您可以设计两个测试之间的耦合。因此,如果不运行第一个测试,您就永远无法运行第二个测试,如何确保运行哪个订单测试?
因此,编写一些实用程序函数,在每个测试中用一些包含预期值的存根填充_ moduleInfo
。
关于如何进行测试的一个非常好的来源是书The Art of Unit Testing: With Examples in .Net。
答案 1 :(得分:0)
您确定不只是为每个测试创建测试类的新实例吗?对我来说这似乎是非常合理的行为 - 一个测试不应该依赖于已经执行的其他测试。看起来您应该使用[SetUp]
代替。