自动固定装置和接口

本文关键字:接口 装置 | 更新日期: 2023-09-27 18:31:33

假设我有接口:

public interface IFoo
{
    int Bar1 { get; set; }
    int Bar2 { get; set; }
}

如果IFoo是课堂,我可以写:

fixture.CreateAnonymous<IFoo>();

结果将为 Bar1Bar2 设置数字。

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

我正在寻找像CreateAnonymous用于课程的自动化方式。当前我正在创建界面模拟并显式设置其属性,这是我想保存的工作。我一定错过了一些明显的东西。

自动固定装置和接口

如果要将接口映射到特定的具体类,当然可以这样做:

fixture.Register<IFoo>(() => fixture.CreateAnonymous<ConcreteFoo>());

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

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

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

为了使它适用于 Moq,需要在Mock<T>本身上调用 SetupAllProperties()。虽然可能,但在当前的AutoMoq图中有点困难。已经有一个工作项,但如果您通读讨论,您会发现问题比看起来更复杂。

无论如何,出于许多其他原因,具有属性的接口也是一个坏主意,因此最好的解决方案是重新设计接口,使其没有属性。