2

enumを取得してに変換するSilverlightValueConverterがあり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)単体テストで、Silverlightアプリケーションを実行するときとは異なるCLRが読み込まれるためです。単体テストでUIをテストするべきではないことはわかっていますが、これはValueConverterをテストしているだけなので、有効なテストだと思います。

誰かがこれがテスト可能かどうか、そしてどのようにテスト可能か知っていますか?

4

2 に答える 2

1

ここでの主な問題は、Silverlight以外のランタイムでSilverlightコードを実行しようとしていることだと思います。

昨日または前日に、あなたとほとんど同じように動作するValueConverterを作成しました。私もそれのためにいくつかのテストを書きました。Silverlight Toolkitに付属のSilverlightユニットテストランナーを使用してテストを実行しましたが、すべて正常に実行されました。

SilverlightテストをSilverlightランタイムで、つまりブラウザープラグイン内で実行することをお勧めします。前述のSilverlightユニットテストフレームワークを使用できます。また、NUnitからSilverlightへの移植も試してみることができます。ただし、このSilverlightNUnitポートがどれほど最新であるかはわかりません。

于 2011-11-11T13:04:12.050 に答える
0

Lukeの答えに加えて、を使用してUIスレッドでコードを呼び出す場所を調べることをお勧めしますDeployment.Current.Dispatcher。これにより、MS.Internal.JoltHelper例外が発生する可能性があります。

于 2016-07-12T10:13:08.930 に答える