20
我有一個用於創建一些數據對象的工廠的接口。如何使用FakeItEasy訪問Returns()中的參數值?
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");
}
}
因此,工廠有兩組參數調用兩次。
使用起訂量,這很容易:
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();
如何訪問這些參數值?
這是推薦的方法! –