我正在VS2015中设置自定义类的单元测试。我发现在同一个类上运行两种测试方法时看起来很奇怪。这里的问题简单化:对象的新实例实际上是重用现有对象
public MyClass
{
private List<string> _MyList = new List<string>();
public void AddItem(string s)
{
_MyList.Add(s);
}
public List<string> GetList()
{
return _MyList;
}
}
[TestMethod]
public void AddSingleItem()
{
MyClass instance = new MyClass();
instance.AddItem("string 1");
Assert.AreEqual(1, instance.GetList().Count);
}
[TestMethod]
public void AddMultipleItems()
{
MyClass instance = new MyClass();
instance.AddItem("string 1");
instance.AddItem("string 2");
Assert.AreEqual(2, instance.GetList().Count);
}
的问题是,第一次测试通过的罚款,并在自身运行第二个测试通过罚款,但如果一起运行第二次测试失败说断言预期,实际是不同的,好像方法是将字符串添加到同一个对象(尽管创建了它的新实例)。
我添加了一个构造函数来确保_MyList
在实例化时被清除,这解决了问题,但我想知道这是否是预期的,为什么?不得不让你的默认构造函数清除你所有的属性是否是标准做法?看起来很奇怪,new MyClass()
实际上并没有产生一个全新的实例。
以供参考,这是我提到的构造:
public MyClass()
{
_MyList.Clear();
}
您发布的代码是否显示您正在讨论的行为,或者您是否简化了它,然后不运行测试? – StriplingWarrior
我没有完全测试这段代码,但它包含了单元测试中涉及的所有部分。我会快速地嘲笑它,以确保它可以通过此代码重现。 – thanby
请再次阅读[MCVE]指导。发布一些与您遇到问题无关的代码是没有意义的。 –