似乎下面的代码不符合我的预期:

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之外,fake容易返回IDependency的伪实例。也许是设计使然?无论如何,我将如何解决此问题并确保baseObj.Dependency返回配置的内容?

最佳答案

这是正常现象。 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的另一个成员,这是在基本接口中定义的依赖项。

关于c# - FakeItEasy-新修饰符的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32405776/

10-09 07:27