4

インターフェースがあるとしましょう

public interface IDatabase
{
  IObjectSet<Table1> Table1 {get;}

  IObjectSet<Table2> Table2 {get;}

  //goes on to around Table400
}

FakeItEasy でインスタンスを作成すると、次のようになります。

var fakeDb = A.Fake<IDatabase>();

すべてのプロパティ (テーブル) には、デフォルトの偽の値があります。これがほとんどのシナリオで便利な理由はわかりますが、私のシナリオでは、すべてをそうする必要がありますnull

それを行う賢い方法はありますか?

4

2 に答える 2

5

それがどのように機能するかはわかりませんが、オブジェクトへのすべての呼び出しに期待値を設定できることがわかりました。

[TestMethod]
public void TestMethod1()
{
    var fake = A.Fake<IDatabase>();
    fake.AnyCall().DoesNothing();

    var result = fake.Table1;

    Assert.IsNull(result);
}

AnyCallを使用すると、特定のフェイクへのすべての呼び出しに期待値を設定できます。この場合、 DoesNothingはデフォルト値のnullを返します。

于 2013-09-23T12:41:09.947 に答える
4

完全を期すためだけに。デフォルトの偽の値を自動的に作成しないように FakeItEasy に指示する別の方法は、次のように偽を厳密に宣言することです。

var fake = A.Fake<IDatabase>(builder => builder.Strict());

ただし、この場合、以前に設定されていないメンバーが呼び出されると、FakeItEasy は例外をスローします。

あなたの場合、提案されたバージョンが最適ですが、Aどの呼び出しが偽物のセットアップであるかをよりよく確認できるように、構文を使用して記述します。

A.CallTo(fake).DoesNothing();

これら 2 つは同一です。

于 2013-09-23T20:05:01.040 に答える