以下代码似乎没有像我期望的那样行事:
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,假设它很容易返回IDependency
的假实例。也许是按设计?无论如何,我如何解决这个问题并确保baseObj.Dependency
返回已配置的内容?
答案 0 :(得分:4)
这是正常行为。 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的另一个成员,它是基接口中定义的依赖项。