Как выполнить модульное тестирование Silverlight ValueConverters, которые создают объекты DependencyObjects - PullRequest
2 голосов
/ 11 ноября 2011

У меня есть 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.Я знаю Я не должен тестировать пользовательский интерфейс в юнит-тестах , но это всего лишь тестирование моего ValueConverter, поэтому я думаю, что это корректный тест.

Кто-нибудь знает, если и как этопроверяемый

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Я думаю, что главная проблема здесь в том, что вы пытаетесь запустить код Silverlight во время выполнения, отличном от Silverlight.

Либо вчера, либо за день до того, как я написал ValueConverter, который выполняет почти то же самое, что и ваш.Я также написал несколько тестов для этого.Я выполнил тесты с помощью модуля модульных тестов Silverlight, который поставляется с Silverlight Toolkit , и все тесты прошли нормально.

Я бы рекомендовал запускать ваши тесты Silverlight во время выполнения Silverlight, т.е.в плагине браузера.Вы можете использовать платформу модульного тестирования Silverlight, о которой я упоминал выше, а также есть порт NUnit для Silverlight , который вы можете попробовать.Однако я не знаю, насколько актуален этот порт Silverlight NUnit.

0 голосов
/ 12 июля 2016

В дополнение к ответу Люка, я бы посоветовал вам взглянуть на места, где вы вызываете код в потоке пользовательского интерфейса, используя Deployment.Current.Dispatcher. Это может вызвать исключение MS.Internal.JoltHelper.

...