首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用伪造的AutoMocking

禁用伪造的AutoMocking
EN

Stack Overflow用户
提问于 2013-09-23 12:28:21
回答 2查看 352关注 0票数 4

假设我有一个接口

代码语言:javascript
复制
public interface IDatabase
{
  IObjectSet<Table1> Table1 {get;}

  IObjectSet<Table2> Table2 {get;}

  //goes on to around Table400
}

因此,当我用FakeItEasy创建一个实例时:

代码语言:javascript
复制
var fakeDb = A.Fake<IDatabase>();

所有属性(表)都有一个缺省假值。我能理解为什么这在大多数塞纳里奥斯人中很方便,但在我的,我需要他们都是null

有什么聪明的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-23 12:41:09

我不确定它是如何工作的,但我发现您可以设置对对象的所有调用的期望:

代码语言:javascript
复制
[TestMethod]
public void TestMethod1()
{
    var fake = A.Fake<IDatabase>();
    fake.AnyCall().DoesNothing();

    var result = fake.Table1;

    Assert.IsNull(result);
}

通过使用AnyCall,您可以对特定假的所有调用设置期望--在本例中,DoesNothing返回默认值null。

票数 5
EN

Stack Overflow用户

发布于 2013-09-23 20:05:01

只是为了完整。告诉FakeItEasy它不应该自动创建缺省假值的另一种方法是声明您的假冒伪劣,如下所示:

代码语言:javascript
复制
var fake = A.Fake<IDatabase>(builder => builder.Strict());

不过,在这种情况下,如果调用了一个成员,FakeItEasy会抛出一个异常,这在以前没有设置过。

在您的例子中,建议的版本是最好的,尽管我会用A语法编写它,这样您最好看看哪些调用是伪造的设置:

代码语言:javascript
复制
A.CallTo(fake).DoesNothing();

这两个是一样的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18959227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档