将 Moles 与 XUnit 一起使用 - 错误的 dll 版本

发布于 2024-11-07 04:03:05 字数 562 浏览 4 评论 0原文

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

鼹鼠手册(第 28 页)确实说:

xUnit.net 版本:

<块引用>

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

这就是我陷入困境的地方 - 这个 xunit 扩展的源代码在某处可用吗?或者我必须使用 Moles 需要的 xunit 的特定版本?

I'm trying to set up Moles to use in our unit testing. We are using xunit, so I am using the Xunit extension that comes with moles (Microsoft.Moles.Framework.Xunit). However, as we are running Xunit 1.7, Moles is complaining that I am not running Version 1.6.1.1521 (with a FileLoadException).

The Moles Manual (page 28) does say:

xUnit.net Version:

1.5.0.1479 (for other xUnit.net versions, recompile the attribute from sources)

This is where I get stuck - is the source code for this xunit extension available somewhere? Or will I have to use the specific version of xunit that Moles requires?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

从此见与不见 2024-11-14 04:03:06

您不能在 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>

Can't you define a assembly binding redirect in the 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>
对你再特殊 2024-11-14 04:03:06

如果您必须重新编译,那么您可以这样做。我寻找 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 有任何更改,这是唯一的依赖项。

If you have to recompile then you can do it. I looked for Moles source code but I couldn't find it anywhere. Then I tried to disassemble Microsoft.Moles.Xunit.dll and I realized that the attribute is just few lines long.

MoledAttribute source code:

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

You should create a new class library and add reference to your xunit.dll of any version you want. It should even work with 1.8.0.1545 as I haven't noticed any changes to XUnit.BeforeAfterTestAttribute which is the only depencency.

趁年轻赶紧闹 2024-11-14 04:03:06

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

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

While proxon's answer was very helpful for getting my task done, allow me to present a better answer I found as I investigated further (to hopefully help others coming across this problem). The source code is found in C:\Program Files\Microsoft Moles\Documentation\moles.samples.zip. Pretty much identical to the code that proxon decompiled, of course.

You can also find the NUnit and MbUnit wrappers in there.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文