假设我有界面:
public interface IFoo
{
int Bar1 { get; set; }
int Bar2 { get; set; }
}
如果
IFoo
是类,我可以这样写:fixture.CreateAnonymous<IFoo>();
结果将为
Bar1
和Bar2
设置数字。但是如何通过界面做到这一点?我尝试使用
AutoMoqCustomization
,但这似乎是针对具有接口(interface)类型的属性,而不是接口(interface)本身。我正在寻找像
CreateAnonymous
这样的自动化类。 Currenlty我正在创建接口(interface)模拟并显式设置它的属性,这是我要保存的工作。我必须错过一些显而易见的东西。 最佳答案
如果您想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,但是如果您仔细阅读讨论,您会发现问题比看起来的要复杂。无论如何,由于许多其他原因,具有属性的接口(interface)也是一个坏主意,因此最好的解决方案是重新设计接口(interface),使其不具有属性。
关于c# - 自动修复和界面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10208648/