入力パラメーターを指定しないMoqモックメソッド


133

Moqを使用したテストにいくつかのコードがあります。

public class Invoice
{
    ...

    public bool IsInFinancialYear(FinancialYearLookup financialYearLookup)
    {
        return InvoiceDate >= financialYearLookup.StartDate && InvoiceDate <= financialYearLookup.EndDate;
    }
    ...
}

だからユニットテストで私はこのメソッドをモックして真を返すようにしています

mockInvoice.Setup(x => x.IsInFinancialYear()).Returns(true);

とにかくこの行を書くので、への入力を指定する必要はありませんIsInFinancialYear。すなわち。コードに入力パラメータがないので、渡されたものは何でもtrueを返しますか?

回答:


227

を使用It.IsAny<T>()して、任意の値を照合できます。

mockInvoice.Setup(x => x.IsInFinancialYear(It.IsAny<FinancialYearLookup>())).Returns(true);

クイックスタートの「マッチング引数」セクションを参照してください。


5
この答えは古いことに気づきましたが、単純なパラメーターが複数ある場合はどうなりますか?「型がすべてのパラメーターに適合するすべてのもの」と言うことは可能ですか?
Brandon

6
@Brandon次に、各パラメーターにIt.IsAny <type>()を使用します。typeは、paramの型です。もし望むなら、おそらくリフレクションを介してこれを行うヘルパー関数を書くことができます。
user441521


3
ここにある他のコメントに同意します。重要なメソッドにこれを入力するのは大きな苦痛です。
ジョンハーグローブ

これを行うヘルパーは誰にもいますか?または、メソッドごとにヘルパーを記述する必要があります/
Meysam

18

を使用It.IsAny<FinancialYearLookup>()して任意の引数を受け入れてみます。

mockInvoice.Setup(x => x.IsInFinancialYear(It.IsAny<FinancialYearLookup>())).Returns(true);

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.