【问题标题】:Unit Tests pass fine if run one at a time, FileLoadException if run "All Tests in Solution"如果一次运行一个单元测试,则单元测试通过,如果运行“解决方案中的所有测试”,则通过 FileLoadException
【发布时间】:2012-02-14 18:08:43
【问题描述】:

我正在尝试对我的一些类进行单元测试,并且遇到一个问题,即单独运行测试在 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

我一直在尝试找出原因很长时间,并尝试在线搜索,但没有找到遇到同样问题的人。

这是我的代码的一个简单示例:

注册表服务文件:

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);
}

我已经简化了代码,试图在不占用太多空间的情况下展示我在做什么。我可以一个一个地运行这些没有问题,但是一起运行时会收到异常。

【问题讨论】:

  • 我已经尝试运行这两个测试并且它们通过了。你还有信息吗

标签: c# visual-studio-2010 unit-testing prism rhino-mocks


【解决方案1】:

我通过卸载其他单元测试项目然后运行测试直到它工作,显然其中一个使用了一些旧的棱镜引用并且这些文件被包含而不是更新的文件,现在问题在我解决后得到了解决删除并重新阅读了参考资料。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 2010-09-24
    • 2017-10-12
    • 2016-12-08
    相关资源
    最近更新 更多