2010-11-29 34 views

回答

2

这是一个有点粗糙,但一个可能性将从System.Windows.Application.Current.Host.Source测试其中一个属性(可能是LocalPath)。您需要测试宿主XAP文件是否来自您的测试项目的XAP,或者它是否是您的应用程序的XAP。这显然会对XAP文件名作出假设,这使得它变得有点脆弱(即使从名称空间派生出某些东西,XAP文件名在任何情况下都可以在项目属性中实际配置 - 所以不能保证它始终匹配)。

或者,你可以测试System.Windows.Application.Current.RootVisual的价值。同样,您当然需要记住,不能保证Silverlight单元测试框架的未来版本将使用相同的Microsoft.Silverlight.Testing.Client.TestPage(尽管将检查可能作为静态扩展方法用于例如,应用程序类至少意味着您可以根据需要在未来将更改限制在您的扩展方法中)。

另一种方法是使用HTML桥和测试从System.Windows.Browser.HtmlPage.Document.DocumentUri的属性之一。这看起来比前两个选项差,因为关于托管uris /页面名称的假设可能会比关于用于应用程序的特定UIElement或XAP文件的名称的假设更差。

根据各地XAP文件名或托管的网页名称的任何解决方案可能会需要依靠以公约为基础的名字在任何情况下,如你所要使用的技术,在多个模块/项目的测试。

一个更好的选择可能是使用System.Windows.Application.Current.Host.InitParams。您可能会在测试项目中的页面中传递特定的参数,并最终让您的代码测试该特定参数的值。这具有的优点是,它不需要任何特定的RootVisual或任何特定的命名约定用于XAP文件名或uri /页面名称。

+0

的帮助!哇!谢谢你Derek!对我而言,如果我仍然需要这样做,第二种选择将是最好的。不过,我已经将我的单元测试策略转换为更多类似于下面的建议。如果我有一些时间,我会举一个例子说明你的建议可以如何完成。再次感谢! – 2010-11-29 20:49:51

2

最好的办法就是不要有由具有良好的设计,可以让你重新绑定DomainClient在测试中,而不是在你的产品代码应该使用哪个实例决定都知道这一点。这使您的生产代码免于测试代码,并减少奇怪异常的机会。

一个黑客将创建一个静态类,静态属性UnitTestRunning即默认为false,并在测试初始化​​设置为true,并在模块中读取。

+0

嘿雷莫!我绝对同意你的看法,在我的测试中能够重新绑定DomainClient更好。我意识到我可以在代码中做到这一点,我相应地改变了它。谢谢你的建议! – 2010-11-29 20:50:31

相关问题