我有一个对象有很多我想测试的属性。我TestMethod
为每个属性编写了一个,但问题是许多属性在设置时会操纵其他属性。我需要的是能够设置我的测试对象,操作其中一个变量,运行测试,将对象重置为其原始状态,然后重复该过程。这样,我就可以避免过多的冗余。
我研究过使用数据驱动方法(这是解决此问题的完美解决方案),但 Silverlight 测试框架似乎无法使用这种方法,因为我找不到使用该DataSource
属性的方法。我想过尝试看看是否可以DataSource
通过传统的 MSTest 框架访问,但可惜我只有 Visual Studio Express。
我曾想过尝试创建一个自定义测试工具,看看是否可以解决这个问题,但我想我会先四处寻求建议。
也许我应该把它吸起来,把所有不同的配置写成单独的TestInitialize
方法,然后注释掉我不需要的那些。
任何帮助将不胜感激。
更新/澄清:
这是要测试的对象如何工作的示例。假设您有一个带有位置坐标和每边坐标的形状。当您更新位置或一侧的坐标时,所有其他坐标也必须更新。
这是正在测试的功能。我想做的是能够设置多个初始化(通过ClassInitialize
或你有什么),我将设置我的对象的初始值和包含预期测试结果的模拟,然后更改有问题的属性之一。像这样的东西(这只是为了说明,所以请忽略任何不良做法xD):
// class under test (mock has the same properties & constructor)
public class MySquare
{
public Vector2 XYPosition;
public int Width;
public int Height;
public float TopSidePosition;
public float RightSidePosition;
...
public MySquare(float x, float y, int width, int height)
{
// set up all properties
}
}
// test object container
public class Container
{
public static MySquare square;
public static MySquareMock squareMock;
}
// desired test class initializations (it would be nice to be able to run each of these
// as well as the TestMethods and then reset to the next TestSetupClass)
[TestClass]
public class TestSetupClass1
{
[ClassInitialize]
public void SetupTest()
{
// set up initial value and expected result
Container.square = new MySquare(0, 0, 5, 5);
Container.squareMock = new MySquareMock(1, 1, 5, 5);
Container.square.XYPosition = new Vector2(1, 1);
}
}
[TestClass]
public class TestSetupClass2
{
[ClassInitialize]
public void SetupTest()
{
// set up initial value and expected result
Container.square = new MySquare(0, 0, 5, 5);
Container.squareMock = new MySquareMock(1, 0, 5, 5);
Container.square.RightSidePosition = 6;
}
}
// test methods
[TestClass]
public class TestMethods
{
[TestMethod]
public void TestPosition()
{
Assert.AreEqual(Container.squareMock.XYPosition, Container.square.XYPosition);
}
[TestMethod]
public void TestTopSidePosition()
{
Assert.AreEqual(Container.squareMock.XYTopSidePosition, Container.square.TopSidePosition);
}
// test method for each property
}