Модульный тест Moq: «Инициализатор типа для Real.Shared.Dependency вызвал исключение». - PullRequest
0 голосов
/ 20 марта 2011

Мне нужна помощь с моими тестами Moq.У меня есть один большой проект, и когда мы начали создавать тесты с использованием конфигурации XML, все прошло хорошо.Теперь это было изменено, и вся конфигурация находится в БД.

Некоторые методы изменены и так.(Я использую текущую платформу для создания модульных тестов и создаю некоторые тесты. Я хочу сказать, что я новый с тестами.) Теперь у меня проблема: не работает ни один тест.Я получил следующую ошибку, используя простой тестовый запуск, когда выполнение кода пытается запустить метод.

if (!UnitWork.HasStarted) UnitWork.Start();

Ошибка:

The type initializer for 'Real.Shared.Dependency' threw an exception.

StackTrace:

at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at Real.Shared.Dependency..cctor()

Нужно ли вносить изменения в базовый класс теста, иликто-то знает, что еще здесь происходит?

Это метод, при котором тест прерывается, когда я пытаюсь запустить UnitWork.Start(), что кстати.public static class:

public T ResolveConfValueForURL<T>(string url, string configurationKey)
{
    try
    {
        if (!UnitWork.HasStarted) UnitWork.Start();

        UrlToOrganMapping urlToOrgMap =
            (UrlToOrganMapping)Dependency.Resolve<IUrlToOrganMappingRepository>()
            .GetByUrl( url );

        if ( urlToOrgMap != null )
            return ResolveConfValue<T>(urlToOrgMap.Organization, configurationKey, null);
        else
            return ResolveConfValue<T>(null, configurationKey, null);
    }
    catch (Exception e)
    {
        //Log an eror
        LoggingBLL.LogMessage("Configuration - ResolveConfValueForURL", e);
        throw;
    }
    finally
    {
        if (UnitWork.HasStarted) UnitWork.Finish();
    }
}

1 Ответ

0 голосов
/ 22 марта 2011

Глядя на сообщение об ошибке:

в Real.Shared.Dependency..cctor ()

.cctor означает, что это статический конструктор, который соответствуетчасть сообщения об ошибке «type initializer».

В Google ничего не найдено для Real.Shared.Dependency;это один из твоих классов?Если так, я бы проверил статический конструктор для этого типа.При необходимости установите точку останова и запустите модульные тесты;посмотрите, не разыменованы ли какие-либо нулевые значения.

Попробуйте написать простейший значимый тест, который вы можете.Проследите через это.При необходимости опубликуйте код для метода тестирования (включая SetUp, если есть).Если Dependency - это ваш класс, отметьте это и опубликуйте статический код конструктора.Пожалуйста, постарайтесь сначала разобраться в этом;у вас есть доступ к полному исходному коду и отладчику, которых у нас нет.

...