FakeItEasy - 新修改器的问题

FakeItEasy - problems with new modifier

看来以下代码的行为与我预期的不同:

using FakeItEasy;
using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        var derived = A.Fake<IDerived>();
        A.CallTo(() => derived.Dependency).Returns(null);

        IBase baseObj = derived;
        Assert.IsNull(baseObj.Dependency); //Fails
    }
}

public interface IDerived : IBase
{
    new IDependency Dependency { get; }
}

public interface IBase
{
    IDependency Dependency { get; }
}

public interface IDependency
{
}

与其返回 null,不如简单地伪造 returns IDependency 的伪造实例。也许是设计使然?无论如何,我将如何解决这个问题并确保 baseObj.Dependency returns 配置了什么?

这是正常现象。 IDerived 现在有两个成员。一种继承自IBase,一种定义在IDerived。

在您的测试方法中,您正在使用 FakeItEasy 设置 IDerived 中的值。

未设置来自 IBase 的成员。所以它得到 FakeItEasy 给它的默认值,这是一个模拟的 IDependency。

如果要设置,请使用以下代码:

IDerived derived = A.Fake<IDerived>();

IBase baseObj = derived;

A.CallTo(() => baseObj.Dependency).Returns(null);

Assert.IsNull(baseObj.Dependency); //No error here

在这段代码中,我们正在设置 IDerived 的另一个成员,这是在基接口中定义的依赖项。