似乎下面的代码不符合我的预期:
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/