我试图在我的一个项目中使用Moq.Automock,而我以前从未使用过。请参见下面的代码:

[TestFixture]
public class BusinessLayerTests
{
    List<Denomination> expectedDenominations;

    AutoMocker mocker = new AutoMocker();
    UKCurrency Currency;
    IDenominationFactory DenominationFactory;

    [OneTimeSetUp]
    public void Initialize()
    {
        Currency = mocker.CreateInstance<UKCurrency>();
        DenominationFactory = mocker.CreateInstance<DenominationFactory>();
        mocker.Setup<UKCurrency>(x => x.CurrencyDenominations()).Returns(CurrencyDenominations());
    }

    public System.Collections.Generic.IEnumerable<decimal> CurrencyDenominations()
    {
        yield return 50M;
    }
}


我相信上面的代码表明我已经创建了一个名为Currency的模拟对象。我相信以“ mocker.Setup”开头的行应确保调用了名为“ CurrencyDenominations”的本地方法。但是,这不会发生。调用在CurrencyDenominations中称为UKCurrency的方法。

我究竟做错了什么?

最佳答案

您需要获取基础模拟并在其上应用设置。

[OneTimeSetUp]
public void Initialize() {
    Currency = mocker.CreateInstance<UKCurrency>();
    DenominationFactory = mocker.CreateInstance<DenominationFactory>();
    var currencyMock = mocker.GetMock<UKCurrency>();
    currencyMock.Setup(_ => _.CurrencyDenominations()).Returns(CurrencyDenominations());
}


提供的UKCurrency.CurrencyDenominations是虚拟的并且可以被覆盖。

09-28 09:48