2011-09-14 61 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表達式的信息!謝謝! –

相關問題