假设我有一个接口
public interface IDatabase
{
IObjectSet<Table1> Table1 {get;}
IObjectSet<Table2> Table2 {get;}
//goes on to around Table400
}因此,当我用FakeItEasy创建一个实例时:
var fakeDb = A.Fake<IDatabase>();所有属性(表)都有一个缺省假值。我能理解为什么这在大多数塞纳里奥斯人中很方便,但在我的,我需要他们都是null。
有什么聪明的方法吗?
发布于 2013-09-23 12:41:09
我不确定它是如何工作的,但我发现您可以设置对对象的所有调用的期望:
[TestMethod]
public void TestMethod1()
{
var fake = A.Fake<IDatabase>();
fake.AnyCall().DoesNothing();
var result = fake.Table1;
Assert.IsNull(result);
}通过使用AnyCall,您可以对特定假的所有调用设置期望--在本例中,DoesNothing返回默认值null。
发布于 2013-09-23 20:05:01
只是为了完整。告诉FakeItEasy它不应该自动创建缺省假值的另一种方法是声明您的假冒伪劣,如下所示:
var fake = A.Fake<IDatabase>(builder => builder.Strict());不过,在这种情况下,如果调用了一个成员,FakeItEasy会抛出一个异常,这在以前没有设置过。
在您的例子中,建议的版本是最好的,尽管我会用A语法编写它,这样您最好看看哪些调用是伪造的设置:
A.CallTo(fake).DoesNothing();这两个是一样的。
https://stackoverflow.com/questions/18959227
复制相似问题