AutoMocker 安装程序无法正常工作

问题描述 投票:0回答:1

我正在尝试在我的一个项目中使用

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
的方法。

我做错了什么?

c# .net unit-testing moq
1个回答
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
是虚拟的并且可以被覆盖。

© www.soinside.com 2019 - 2024. All rights reserved.