Модульные тесты проходят нормально, если запускаются по одному, FileLoadException, если запускаются «Все тесты в решении» - PullRequest
4 голосов
/ 14 февраля 2012

Я пытаюсь провести модульное тестирование некоторых из моих классов, и у меня возникает проблема, при которой выполнение тестов по отдельности работает нормально 100% времени, но если я запускаю их массово / каждый раз использую опцию «Все тесты в решении» проверка одного из моих файлов завершается с ошибкой:

System.IO.FileLoadException was unhandled by user code
  Message=Could not load file or assembly 'Microsoft.Practices.Prism, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
  Source=ServicesModuleTests
  FileName=Microsoft.Practices.Prism, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null

Я пытался выяснить, почему долго, и пытался искать в Интернете, но не нашел никого с такой же проблемой.

Вот краткий пример моего кода:

Файл RegistryService:

public class RegistryService
{
    protected ILoggerFacadeExtended _Logger { get; set; }
    protected IConnectivityService _Connectivity { get; set; }

    [ImportingConstructor]
    public RegistryService(ILoggerFacadeExtended logger, IConnectivityService connectivity)
    {
        this._Logger = logger;
        this._Connectivity = connectivity;
    }

    public string GetRegistryPath(RegistryHive hive, string path)
    {
        string registryPath = string.Format("{0}\\{1}", GetRegistryHiveString(hive), path.Trim('\\'));
        _Logger.DebugWithFormat("Found registry path: {0}", registryPath);
        return registryPath;
    }

    private string GetRegistryHiveString(RegistryHive hive)
    {
        switch (hive)
        {
            case RegistryHive.ClassesRoot:
                return "HKEY_CLASSES_ROOT";
            case RegistryHive.CurrentConfig:
                return "HKEY_CURRENT_CONFIG";
            case RegistryHive.CurrentUser:
                return "HKEY_CURRENT_USER";
            case RegistryHive.DynData:
                return "HKEY_DYN_DATA";
            case RegistryHive.LocalMachine:
                return "HKEY_LOCAL_MACHINE";
            case RegistryHive.PerformanceData:
                return "HKEY_PERFORMANCE_DATA";
            case RegistryHive.Users:
                return "HKEY_USERS";
        }
        throw new ArgumentOutOfRangeException("hive");
    }
}

Тестовый файл:

private RegistryService CreateMockedRegistryService()
{
    return new RegistryService(MockRepository.GenerateMock<ILoggerFacadeExtended>(), MockRepository.GenerateMock<IConnectivityService>());
}

[TestMethod()]
public void GetRegistryPathTest_ClassesRoot()
{
    RegistryService target = CreateMockedRegistryService();
    RegistryHive hive = RegistryHive.ClassesRoot;
    string path = @"Something\SomethingElse\";
    string expected = @"HKEY_CLASSES_ROOT\Something\SomethingElse";
    string actual;
    actual = target.GetRegistryPath(hive, path);
    Assert.AreEqual(expected, actual);
}

[TestMethod()]
public void GetRegistryPathTest_CurrentConfig()
{
    RegistryService target = CreateMockedRegistryService();
    RegistryHive hive = RegistryHive.CurrentConfig;
    string path = @"Something\SomethingElse\";
    string expected = @"HKEY_CURRENT_CONFIG\Something\SomethingElse";
    string actual;
    actual = target.GetRegistryPath(hive, path);
    Assert.AreEqual(expected, actual);
}

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

1 Ответ

1 голос
/ 23 февраля 2012

Я понял это, выгрузив другие проекты модульных тестов и затем запустив тесты, пока он не заработал, по-видимому, один из них использовал некоторые старые ссылки на призмы, и эти файлы были включены вместо обновленных, проблема теперь решается после того, как я удалил и прочитал ссылки.

...