5

我正在尝试设置 Moles 以在我们的单元测试中使用。我们使用的是xunit,所以我是usingmole()自带的xunit扩展Microsoft.Moles.Framework.Xunit。但是,当我们运行 Xunit 1.7 时,Moles 抱怨我没有运行版本 1.6.1.1521(带有FileLoadException)。

Moles 手册(第28 页)确实说:

xUnit.net 版本:

1.5.0.1479(对于其他 xUnit.net 版本,从源重新编译属性)

这就是我卡住的地方——这个 xunit 扩展的源代码在某处可用吗?还是我必须使用 Moles 需要的特定版本的 xunit?

4

3 回答 3

2

虽然 proxon 的答案对完成我的任务非常有帮助,但请允许我提出一个更好的答案,我在进一步调查时发现(希望能帮助其他人遇到这个问题)。源代码位于C:\Program Files\Microsoft Moles\Documentation\moles.samples.zip. 当然,与 proxon 反编译的代码几乎相同。

您还可以在其中找到 NUnit 和 MbUnit 包装器。

于 2011-05-23T04:28:13.897 回答
2

如果您必须重新编译,那么您可以这样做。我查找了 Moles 源代码,但在任何地方都找不到。然后我尝试反汇编Microsoft.Moles.Xunit.dll,我意识到该属性只有几行长。

MoledAttribute 源代码:

using System;
using System.Reflection;
using XUnit;

namespace Microsoft.Moles.Framework.Xunit
{
    public sealed class MoledAttribute : BeforeAfterTestAttribute
    {
        // Fields
        private IDisposable _molesContext;

        public override void Before(MethodInfo methodUnderTest)
        {
            this._molesContext = MolesContext.Create();
        }

        public override void After(MethodInfo methodUnderTest)
        {
            IDisposable disposable = this._molesContext;
            if (disposable != null)
            {
                disposable.Dispose();
            }
            this._molesContext = null;
        }
    }
}

您应该创建一个新的类库并添加对您想要的任何版本的xunit.dll的引用。它甚至应该与 1.8.0.1545 一起使用,因为我没有注意到XUnit.BeforeAfterTestAttribute的任何变化,这是唯一的依赖。

于 2011-05-18T11:04:51.917 回答
2

您不能在 中定义程序集绑定重定向moles.runner.exe.config吗?

<configuration>
    <runtime>
        <assemblyBinding  xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity
                    name="xunit.dll"
                    publicKeyToken="8d05b1bb7a6fdb6c" />
                <bindingRedirect oldVersion="1.5.0.1479" newVersion="1.6.1.1521" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>
于 2011-05-16T12:43:58.853 回答