我正在尝试在我的一个项目中使用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
的方法。
我做错了什么?
答案 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
是虚拟的,则可以覆盖。