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