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 的另一个成员,这是在基接口中定义的依赖项。
看来以下代码的行为与我预期的不同:
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 的另一个成员,这是在基接口中定义的依赖项。