如何对创建DependencyObjects的Silverlight ValueConverter进行单元测试
我有一个Silverlight ValueConverter,它应该使用如何对创建DependencyObjects的Silverlight ValueConverter进行单元测试,silverlight,unit-testing,nunit,dependencyobject,Silverlight,Unit Testing,Nunit,Dependencyobject,我有一个Silverlight ValueConverter,它应该使用枚举并将其转换为画笔。类似于此简化示例: public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var brush = new SolidColorBrush(Colors.Blue); var entryType = (EntryType)value; if (ent
枚举
并将其转换为画笔
。类似于此简化示例:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var brush = new SolidColorBrush(Colors.Blue);
var entryType = (EntryType)value;
if (entryType == EntryType.Hour)
brush.Color = Colors.Red;
return (brush);
}
如果我想对这个进行单元测试,它将不起作用。我得到一个例外:
System.TypeInitializationException : The type initializer for 'MS.Internal.JoltHelper' threw an exception.
----> System.IO.FileNotFoundException : Could not load file or assembly 'System.Xml, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies.
at MS.Internal.JoltHelper.get_ThreadID()
at MS.Internal.XcpImports.CheckThread()
at System.Windows.DependencyObject..ctor(UInt32 nativeTypeIndex, IntPtr constructDO)
...
我知道这是因为在我的(NUnit)单元测试中,加载了与Silverlight应用程序运行时不同的CLR。我知道,但这只是测试我的ValueConverter,所以我认为这是一个有效的测试
有人知道这是否以及如何可测试吗?我认为这里的主要问题是您试图在非Silverlight运行时运行Silverlight代码 无论是昨天还是前一天,我写了一个ValueConverter,它的功能与您的基本相同。我还为此编写了一些测试。我使用随附的Silverlight单元测试运行程序运行了测试,所有测试都运行良好
我建议在Silverlight运行时运行Silverlight测试,即在浏览器插件中运行。您可以使用我上面提到的Silverlight单元测试框架,您也可以尝试一下。但是,我不知道这个Silverlight NUnit端口有多先进。除了Luke的答案之外,我建议您使用
Deployment.Current.Dispatcher
查看在UI线程上调用代码的位置。这可能导致MS.Internal.JoltHelper
异常