我正在尝试在我的一个项目中使用
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
是虚拟的并且可以被覆盖。