gpt4 book ai didi

moq - 具有抽象类实现接口(interface)的 AutoConfiguredMoqCustomization

转载 作者:行者123 更新时间:2023-12-04 19:05:17 25 4
gpt4 key购买 nike

我使用 AutoFixture 3.21.0、AutoFixture.AutoMoq 3.21.0、NUnit 2.6.3 和 Moq 4.2.1409.1722。

我有以下接口(interface)、两个抽象类(其中一个实现了这个接口(interface))和两个单元测试。

测试通过。

    public interface IMigration
{
IMigrationParameters MigrationParameters { get; set; }
}

public abstract class AbstractSutWithoutInterface
{
public IMigrationParameters MigrationParameters { get; set; }
}

public abstract class AbstractSutWithInterface : IMigration
{
public IMigrationParameters MigrationParameters { get; set; }
}

[TestFixture]
public class UnitTests
{
[Test]
public void TestAbstractSutWithoutInterface()
{
var fixture = new Fixture();
fixture.Customize( new AutoConfiguredMoqCustomization() );

var mock = fixture.Create<AbstractSutWithoutInterface>();

Assert.IsNotNull( mock.MigrationParameters ); // test passes
}

[Test]
public void TestAbstractSutWithInterface()
{
var fixture = new Fixture();
fixture.Customize( new AutoConfiguredMoqCustomization() );

var mock = fixture.Create<AbstractSutWithInterface>();

Assert.IsNull( mock.MigrationParameters ); // test passes
}
}

我的问题是为什么 AutoConfiguredMoqCustomization 对抽象类有不同的行为取决于属性是否由接口(interface)定义?在第一个测试中,属性被断言为不为空,但在第二个测试中为空。如果类不是抽象的,则属性注入(inject)对两个类都按预期工作。

最佳答案

2015 年 4 月 15 日更新

此错误已在 AutoFixture.AutoMoq 3.24.2 中修复.查看详情 here .

2014 年 11 月 3 日更新

现在正在 AutoFixture 的 GitHub 上进行跟踪,Issue 324 .

此外,最小起订量的最后一个工作版本是 4.2.1402.2112,您可以降级到那个版本而不是 4.0。

我只能使用最新版本的最小起订量 (4.2.1409.1722) 来重现这一点。

我现在正在研究这个问题,它似乎在最新版本的 Moq 中引入了一个错误,但它可能是设计使然,我还不确定。

同时,请使用 4.0.10827 版本。要降级,请转到工具 -> NuGet 数据包管理器 -> 包管理器控制台并键入:

Uninstall-Package Moq -Force
Install-Package Moq -Version 4.0.10827

我会用我的发现更新这个答案。

关于moq - 具有抽象类实现接口(interface)的 AutoConfiguredMoqCustomization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26523960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com