2

我有一个 Silverlight ValueConverter,它应该采用 aenum并将其转换为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 应用程序时不同。我知道我不应该在 unit-tests 中测试 UI,但这只是测试我的 ValueConverter,所以我认为这是一个有效的测试。

有谁知道这是否以及如何可测试?

4

2 回答 2

1

我认为这里的主要问题是您试图在非 Silverlight 运行时中运行 Silverlight 代码。

昨天或前一天我写了一个和你的一样的 ValueConverter。我还为它写了一些测试。我使用Silverlight Toolkit附带的 Silverlight 单元测试运行器运行了测试,并且测试都运行良好。

我建议在 Silverlight 运行时(即在浏览器插件中)运行您的 Silverlight 测试。您可以使用我上面提到的 Silverlight 单元测试框架,还有一个 NUnit 到 Silverlight 的端口,您可能想尝试一下。但是,我不知道这个 Silverlight NUnit 端口的最新程度。

于 2011-11-11T13:04:12.050 回答
0

除了 Luke 的回答,我建议您查看在 UI 线程上调用代码的位置,使用Deployment.Current.Dispatcher. 这可能会导致MS.Internal.JoltHelper异常。

于 2016-07-12T10:13:08.930 回答