我有一个Silverlight ValueConverter应该使用enum
并将其转换为Brush
。像这样简化的例子:
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)单元测试中,加载的CLR与运行Silverlight应用程序时不同。我知道I shouldn't test UI in unit-tests,但这只是测试我的ValueConverter,所以我认为这是一个有效的测试。
有谁知道这是否以及如何测试?
答案 0 :(得分:1)
我认为这里的主要问题是您尝试在非Silverlight运行时运行Silverlight代码。
昨天或前一天我写了一个与你的版本大致相同的ValueConverter。我也为它写了一些测试。我使用Silverlight Toolkit附带的Silverlight单元测试运行器运行测试,测试都运行正常。
我建议在Silverlight运行时运行Silverlight测试,即在浏览器插件中运行。您可以使用我上面提到的Silverlight单元测试框架,您也可以尝试使用a port of NUnit to Silverlight。但是,我不知道这个Silverlight NUnit端口是多么最新。
答案 1 :(得分:0)
除了Luke的回答之外,我建议您使用Deployment.Current.Dispatcher
查看在UI线程上调用代码的位置。这可能会导致MS.Internal.JoltHelper
例外。