【问题标题】:Freeze enum value in AutoFixture在 AutoFixture 中冻结枚举值
【发布时间】:2014-02-07 04:20:00
【问题描述】:

我们有一个枚举:

enum Letters
{
    A,
    B,
    C,
    D,
    E        
}

当我尝试时:

var frozenLetter = fixture.Freeze(Letters.D);

奇怪的是,frozenLetter == A。

var letter = fixture.Create<Letters>();
var anotherLetter = fixture.Create<Letters>();

Letter 和 anotherLetter 都等于 A,因此 Letters 类型已被冻结,但为枚举中的第一个常量,而不是指定的那个。

有没有办法将枚举冻结为我希望的常量?

【问题讨论】:

  • 我可能遗漏了一些东西,但是 Freeze 方法有什么作用?
  • 它“冻结”该类型,以便在请求该类型的实例时始终返回相同的实例。请参阅 AutoFixture 的作者 Mark Seeman 的 AutoFixture Freeze
  • 嗯,看起来像 AutoFixture 的 enums are not supported。作为一种解决方法,您可以在类的顶部声明一个常量 (private const Letters constLetter = Letters.D;) 并使用它而不是使用 AutoFixture 创建枚举。
  • 他们现在是:见EnumGenerator.cs。这将是一个简单的解决方法,但 Letters 的一个实例是间接创建的,它是其他类型的嵌套值。
  • @Pierre-LucPineault 请注意,您链接到的资源明确指出该问题已在 2010 年 7 月修复!

标签: c# .net autofixture


【解决方案1】:

FreezeInjectRegisterare slightly different

对所描述的行为使用Inject,如以下测试所示:

[Fact]
public void Test()
{
    var fixture = new Fixture();

    var expected = Letters.D;
    fixture.Inject(expected);

    var letter = fixture.Create<Letters>();
    var anotherLetter = fixture.Create<Letters>();

    Assert.Equal(expected, letter);
    Assert.Equal(expected, anotherLetter);
}

问题示例代码的问题在于参数(seed) isn't used as the frozen value.

【讨论】:

  • 啊哈,经典错误。感谢您的明确解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-25
相关资源
最近更新 更多