2011-11-11 57 views
2

我有一個Silverlight ValueConverter應該採取enum並將其轉換爲一個Brush單元測試Silverlight的ValueConverters。事情是這樣的簡單的例子:你怎麼創造DependencyObjects

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,所以我認爲這是一個有效的測試。

有誰知道是否以及如何測試?

回答

1

我認爲這裏的主要問題是您試圖在非Silverlight運行時運行Silverlight代碼。

一天或之前,我寫了一個ValueConverter,做多一樣的你的那一天。我也爲它寫了一些測試。我使用Silverlight Toolkit附帶的Silverlight單元測試運行器運行測試,並且測試全部運行良好。

我建議在Silverlight運行時(即在瀏覽器插件中)運行Silverlight測試。您可以使用上面提到的Silverlight單元測試框架,並且您還可以嘗試使用a port of NUnit to Silverlight。但是,我不知道最新的Silverlight NUnit端口是多少。

0

除了盧克的回答,我建議你看看,你在UI線程中調用代碼,使用場所Deployment.Current.Dispatcher。這可能會導致MS.Internal.JoltHelper異常。