gpt4 book ai didi

c# - 如何使用 FakeItEasy 访问 Returns() 中的参数值?

转载 作者:IT王子 更新时间:2023-10-29 04:33:16 24 4
gpt4 key购买 nike

我有一个用于创建一些数据对象的工厂接口(interface)。

interface IFactory
{
IData Create (string name, string data);
}

interface IData
{
// ....
}

class Data : IData
{
public Data (string name, string data)
{
// .....
}
}

我需要创建一个模拟工厂来传递给另一个模块,这个模块将使用这个模拟来创建数据。

举个简单的例子,一个简单的模块如下所示:

class QuickModule
{
private readonly IFactory _factory;

public QuickModule (IFactory factory)
{
_factory = factory;
}

public IEnumerable<IData> GetData ()
{
yield return _factory.Create ("name1", "abc");
yield return _factory.Create ("name2", "def");
}
}

因此,使用两组参数调用工厂两次。

使用 Moq,这很容易:

var factoryMock = new Mock<IFactory> ();
factoryMock.Setup (x => x.Create (It.IsAny<string> (), It.IsAny<string> ()))
.Returns ((string name, string data) => new Data (name, data));
var module = new QuickModule (factoryMock.Object);
var list = module.GetData ();

但是使用 FakeItEasy 这似乎是不可能的:

var factory = A.Fake<IFactory> ();
A.CallTo (() => factory.Create (A<string>.Ignored, A<string>.Ignored))
.Returns (new Data (???, ???));
var module = new QuickModule (factory);
var list = module.GetData ();

如何访问参数值?

最佳答案

好的,看来 ReturnsLazily() 就是答案。

这就是我所做的:

var factory = A.Fake<IFactory> ();
A.CallTo (() => factory.Create (A<string>.Ignored, A<string>.Ignored))
.ReturnsLazily ((string name, string data) => new Data (name, data));
var module = new QuickModule (factory);
var list = module.GetData ();

这是推荐的方式还是有其他方式?

关于c# - 如何使用 FakeItEasy 访问 Returns() 中的参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13256001/

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