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();

这两个是相同的。

于 2013-09-23T20:05:01.040 回答