gpt4 book ai didi

unit-testing - FakeItEasy 深层嵌套类型伪造

转载 作者:行者123 更新时间:2023-12-03 01:11:39 25 4
gpt4 key购买 nike

我有一个复杂的对象,我想伪造它。

interface IContext
{
User User { get; }
}

A.CallTo(
() => _fakeContext.User.Subscription.Attributes)
.Returns(new List<Attribute>());

但是我得到了下一个异常:

当前代理生成器无法拦截指定方法,原因如下: - 无法拦截非虚方法

所有嵌套类型都是属性,并且它们是带有 get 的简单贫乏类型; set; 属性修饰符。当我查看调试器时,它们都是假的。

有什么方法可以设置链的最后一个属性并避免设置所有以前的属性吗?

最佳答案

如果你的对象足够贫乏,你可能想要给出 AutoFixture开始吧:

var fake = A.Fake<>();
var fixture = new Fixture();
// If it's possible [1], AutoFixture will generate entire object graph
var user = fixture.CreateAnonymous<User>();
// Since data will be random [2], you can overwrite properties as you like
user.User.Subscription.Attributes = new List<Attributes>();
A.CallTo(() => fake.User).Returns(user);
  1. 为了使其正常工作,您的自定义对象需要具有公共(public)构造函数,并且最好避免使用接口(interface)(但这可以通过自动模拟扩展来缓解,例如 AutoFakeItEasy)。
  2. .Build方法提供了流畅的API来自定义对象自动生成,因此可以控制随机性

关于unit-testing - FakeItEasy 深层嵌套类型伪造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14382630/

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