假设我有一个接口:
public interface IFoo
{
int Bar1 { get; set; }
int Bar2 { get; set; }
}如果IFoo是类,我可以这样写:
fixture.CreateAnonymous<IFoo>();并且结果将具有为Bar1和Bar2设置的数字。
但是如何通过接口做到这一点呢?我尝试使用AutoMoqCustomization,但这似乎适用于具有接口类型的属性,而不是接口本身。
我正在寻找自动化的方式,像CreateAnonymous是为类。目前,我正在创建接口模拟并显式地设置它的属性,这是我想保存的工作。我肯定漏掉了一些明显的东西。
发布于 2012-04-18 20:17:38
如果你想使用map an interface to a specific concrete class,你当然可以这样做:
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来解决这个问题,但是如果你通读一下讨论,你会发现这个问题比看起来复杂得多。
在任何情况下,具有属性的接口也不是一个好主意,因为还有许多其他原因,所以最好的解决方案是重新设计接口,使其不具有属性。
https://stackoverflow.com/questions/10208648
复制相似问题