【问题标题】:How to get access to parameters value in Returns() using FakeItEasy?如何使用 FakeItEasy 访问 Returns() 中的参数值?
【发布时间】:2012-10-26 16:46:53
【问题描述】:

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

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 ();

如何访问参数值?

【问题讨论】:

    标签: c# fakeiteasy


    【解决方案1】:

    好的,看来 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 ();
    

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

    【讨论】:

    • 这是推荐的方式!
    【解决方案2】:

    以下是如何返回您传递给方法的对象。

    ManufacturedPart inputPart;
    
    A.CallTo(() => partRepo.InsertPart(A<ManufacturedPart>._))
      .ReturnsLazily(x => inputPart = x.Arguments.Get<ManufacturedPart>("part"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多