使用JustMock,我可以根据输入参数安排模拟返回一些东西吗?
例如,假设一个方法接收int
,我想返回该值+ 1
我希望输出始终被模拟为输入+ 1,但我不知道设计时的输入。
我对此的实际用法是使用对象参数,我需要模拟以始终返回具有相同属性的某些的新对象...但我不知道如何引用参数在.Returns()
部分。
编辑:更多详情:
三种类型:
IMoneyConverter
Money
Currency
Money
个对象有两个属性:decimal valueAmount
和Currency valueCurrency
IMoneyConverter
曝光:
.Convert(Money valueFrom, Currency currencyTo, DateTime asOfDate)
此方法返回转换后的Money
对象,在指定日期的新Currency
(currencyTo)中。
我的目的是模拟IMoneyConverter
,以便其.Convert
方法返回一个新的Money
对象,其中包含Money
(valueFrom)参数和{{ CurrencyTo参数的1}}。
答案 0 :(得分:5)
是的,有可能,参见示例。
var foo = Mock.Create<IFoo>();
Mock.Arrange(() => foo.Echo(Arg.IsAny<int>())).Returns((int i) => ++i);
答案 1 :(得分:5)
我不是100%确定我理解了确切的要求,但这个测试有效,我相信会证明如何实现你想要的:
[Test]
public void SampleTest() {
IMoneyConverter mock = Mock.Create<IMoneyConverter>();
mock.Arrange( x => x.Convert( Arg.IsAny<Money>(), Arg.IsAny<Currency>(), Arg.IsAny<DateTime>() ) )
.Returns( (Func<Money,Currency,DateTime,Money>)
( (m, c, d ) => new Money { ValueAmount = m.ValueAmount, Currency = c }) );
Money inMoney = new Money() { ValueAmount = 42 };
Currency inCurrency = new Currency();
Money outMoney = mock.Convert( inMoney, inCurrency, DateTime.Now );
Assert.AreEqual( 42, outMoney.ValueAmount );
Assert.AreSame( inCurrency, outMoney.Currency );
}
public interface IMoneyConverter {
Money Convert( Money valueFrom, Currency currencyTo, DateTime asOfDate );
}
public class Money {
public decimal ValueAmount { get; set; }
public Currency Currency { get; set; }
}
public class Currency {
}