安装程序无法正常运行的AutMocker

时间:2017-06-19 12:34:46

标签: c# .net unit-testing moq

我正在尝试在我的一个项目中使用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的方法。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

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

如果UKCurrency.CurrencyDenominations是虚拟的,则可以覆盖。