7

JustMock を使用して、入力パラメーターに基づいて何かを返すようにモックを調整できますか?

たとえば、メソッドが を受け取るとします。intその値 + 1 を返したいと
します。出力を常に入力 +1 としてモックしたいのですが、設計時に入力がわかりません。

これに対する私の実際の使用法は、オブジェクト パラメーターを使用することであり、同じプロパティのいくつかを持つ新しいオブジェクトを常に返すようにモックする必要があります...しかし、セクション内のパラメーターを参照する方法がわかりません.Returns()

編集:詳細:

3 つのタイプ:
IMoneyConverter
Money
Currency

Moneyオブジェクトには次の 2 つのプロパティがありますdecimal valueAmountCurrency valueCurrency

IMoneyConverter公開します:

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

このメソッドは、指定された日付Moneyの新しいCurrency(currencyTo) で、変換されたオブジェクトを返します。

私の意図はIMoneyConverter、そのメソッドが(valueFrom) パラメーターの量と currencyTo パラメーターの量を持つ新しいオブジェクトを.Convert返すように、をモックすることです。MoneyMoneyCurrency

4

2 に答える 2

7

正確な要件を 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 {
}
于 2012-07-03T20:34:31.770 に答える
6

はい、可能です。例を参照してください。

var foo = Mock.Create<IFoo>();
Mock.Arrange(() => foo.Echo(Arg.IsAny<int>())).Returns((int i) => ++i);
于 2012-01-03T17:34:25.477 に答える