2011-09-14 55 views
4

使用JustMock,我可以安排一个模拟来返回基于输入参数的东西吗?JustMock可以根据参数返回一个值吗?

例如,假设一个方法需要在int,我想返回值+ 1
我所要的输出总是被嘲笑为输入+ 1,但我不知道在设计时输入。

我给这家真正的用法是与对象的参数,我需要模拟总是返回其相同性质的一些一个新的对象......但我不知道如何引用在.Returns()部分参数。

编辑:更多细节:

三种类型:
IMoneyConverter
Money
Currency

Money对象具有两个属性:decimal valueAmountCurrency valueCurrency

IMoneyConverter自曝:

.Convert(Money valueFrom, Currency currencyTo, DateTime asOfDate) 

此方法返回转换Money对象,在新Currency(currencyTo)作为指定的日期的。

我的意图是嘲笑IMoneyConverter使得其.Convert方法返回具有Money(valueFrom)参数的量和所述currencyTo参数的Currency一个新Money对象。

回答

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 { 
} 
3

是的,有可能,请参阅示例。

var foo = Mock.Create<IFoo>(); 
Mock.Arrange(() => foo.Echo(Arg.IsAny<int>())).Returns((int i) => ++i); 
+0

哪里了'诠释i'来从? – Matthew

+0

@MatthewPK您可以在[msdn](http://msdn.microsoft.com/zh-cn/library/bb397687.aspx) –

+0

上阅读关于lambda表达式的信息!谢谢! –

相关问题