首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoFixture和接口

AutoFixture和接口
EN

Stack Overflow用户
提问于 2012-04-18 19:44:58
回答 1查看 6.6K关注 0票数 17

假设我有一个接口:

代码语言:javascript
复制
public interface IFoo
{
    int Bar1 { get; set; }
    int Bar2 { get; set; }
}

如果IFoo是类,我可以这样写:

代码语言:javascript
复制
fixture.CreateAnonymous<IFoo>();

并且结果将具有为Bar1Bar2设置的数字。

但是如何通过接口做到这一点呢?我尝试使用AutoMoqCustomization,但这似乎适用于具有接口类型的属性,而不是接口本身。

我正在寻找自动化的方式,像CreateAnonymous是为类。目前,我正在创建接口模拟并显式地设置它的属性,这是我想保存的工作。我肯定漏掉了一些明显的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-18 20:17:38

如果你想使用map an interface to a specific concrete class,你当然可以这样做:

代码语言:javascript
复制
fixture.Register<IFoo>(() => fixture.CreateAnonymous<ConcreteFoo>());

(或简称fixture.Register<IFoo>( fixture.CreateAnonymous<ConcreteFoo>) )

但是,AutoMoq (以及AutoRhinoMocks和AutoFakeItEasy)也是一种选择。这样,尝试创建一个IFoo实例将返回一个由Moq创建的实现IFoo的代理。

但是,使用Moq时,您将不会看到填充的Bar1和Bar2。这不仅是因为AutoFixture不会调用setter,还因为Moq (默认情况下)不会实现getter。

为了使其适用于Moq,需要在Mock<T>本身上调用SetupAllProperties()。虽然有可能,但在当前的AutoMoq图中,这是有点困难的。已经有了一个work item来解决这个问题,但是如果你通读一下讨论,你会发现这个问题比看起来复杂得多。

在任何情况下,具有属性的接口也不是一个好主意,因为还有许多其他原因,所以最好的解决方案是重新设计接口,使其不具有属性。

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

https://stackoverflow.com/questions/10208648

复制
相关文章

相似问题

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