gpt4 book ai didi

c# - FakeItEasy - 伪造 setter 行为来存储一个值,然后再获取 getter

转载 作者:太空宇宙 更新时间:2023-11-03 10:23:31 24 4
gpt4 key购买 nike

最终我想要一个带有 setter 的内部接口(interface)和一个带有 getter 的公共(public)接口(interface)。复制此场景的代码粗略如下:

    [TestMethod]
public void TestMethod3()
{
var fake1 = A.Fake<IInterface1>(a => a.Implements(typeof(IInterface2)));

string backingString = null;

IInterface2 fake2 = (IInterface2)fake1;
A.CallTo(fake1)
.Where(a => a.Method.Name.Equals("set_Property"))
.Invokes((string param) => { backingString = param; });
A.CallTo(fake1)
.Where(a => a.Method.Name.Equals("get_Property"))
.WithReturnType<string>().Returns(backingString); //doesn't work

A.CallTo(fake2)
.Where(a => a.Method.Name.Equals("set_Property"))
.Invokes((string param) => { backingString = param; });
A.CallTo(fake2)
.Where(a => a.Method.Name.Equals("get_Property"))
.WithReturnType<string>().Returns(backingString); //doesn't work

fake1.Property = "asdf";


Assert.AreEqual("asdf", fake1.Property); //fails -> fake1.Property is null
Assert.AreEqual(fake1.Property, fake2.Property); //fails -> fake2.Property is null
}
}

public interface IInterface1
{
string Property { get; set; }
}

public interface IInterface2
{
string Property { get; }
}

我可以使用 backingString 来存储 setter,但是当设置 getter 时,它并没有像我希望的那样工作。

我还尝试了 A.CallTo(() => fake1.Property).Returns(backingString) 行中的内容,但无济于事。

非常感谢他们专家的帮助:)

最佳答案

当你设置你的

A.CallTo(fake1)
.Where(a => a.Method.Name.Equals("get_Property"))
.WithReturnType<string>().Returns(backingString);

(对于 fake2 也是类似的),

backingString 的值为 null,因此这就是稍后您访问 Property getter 时返回的值。

为了在调用Property getter 时返回backingString 的值,您需要ReturnsLazily .

在每个地方进行此更改并通过测试:

A.CallTo(fake1)
.Where(a => a.Method.Name.Equals("get_Property"))
.WithReturnType<string>().ReturnsLazily(() => backingString);

关于c# - FakeItEasy - 伪造 setter 行为来存储一个值,然后再获取 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32489566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com