Silverlight单元使用相同的测试测试多个初始化

时间:2013-03-18 23:49:46

标签: silverlight unit-testing windows-phone-7

我有一个有很多属性的对象我想测试。我为每个属性编写了一个TestMethod,但问题是许多属性在设置时会操纵其他属性。我需要的是能够设置我的测试对象,操纵其中一个变量,运行测试,将对象重置为其原始状态,然后重复该过程。这样,我可以避免这么多的冗余。

我研究过使用数据驱动方法(这是解决这个问题的完美解决方案),但Silverlight测试框架似乎没有这个方法,因为我找不到使用{{{ 1}}属性。我想过要试着看看我是否可以通过传统的MSTest框架访问DataSource,但是唉,我只有Visual Studio Express。

我曾考虑尝试创建一个自定义测试工具,看看是否可以解决这个问题,但我想我会先询问周围的建议。

也许我应该把它搞砸,然后将所有不同的配置写成单独的DataSource方法并注释掉我不需要的那些。

非常感谢任何帮助。

更新/澄清:

以下是要测试的对象如何工作的示例。假设您的形状具有位置坐标和每侧的坐标。更新位置坐标或其中一个边时,所有其他坐标也必须更新。

这是正在测试的功能。我想要做的是能够设置多个初始化(通过TestInitialize或你有什么)我将设置我的对象的初始值和包含预期测试结果的模拟,然后改变其中一个有问题的财产。这样的事情(这只是为了说明,所以请忽略任何不良做法xD):

ClassInitialize

1 个答案:

答案 0 :(得分:0)

我没有找到完全自动化的方式来实现我的原始目标,但我确实想出了一些相当容易的东西。

首先,我创建了一个单例TestManager类来处理几乎所有的测试设置,因此我只需要在MainPage(测试页面)类中使用一行。在TestManager中,我添加了一个字符串变量,我也从TestSetup添加了MainPage类的名称。

然后,我创建了另一个名为TestClass的{​​{1}},并提供了两个静态字段:

TestSetupClass

在构造函数中,我将基础类型与private static Type childType; private static TestSetupClass childInstance; 中指定的类名进行比较,如果匹配则设置TestManagerchildType

childInstance

接下来,我使用Type thisType = GetType().UnderlyingSystemType; if (thisType.Name.Equals(TestManager.Instance.SetupClassName)) { childType = thisType; childInstance = this; } 属性向TestSetupClass添加了虚拟方法。我的所有安装类都继承自AssemblyInitialize并覆盖此方法。在该方法中,我使用TestSetupClass获取childType以获取子项的方法实现,并使用MethodInfo调用它:

childInstance

瞧!如果要在运行所有测试之前运行特定设置,只需使用MethodInfo childSetup = childType.GetMethod("Setup"); childSetup.Invoke(childInstance, null); MainPage中指定其类名。

我知道还有一些地方我可以做得更好,但是它有效,所以你能做什么。