【问题标题】:FakeItEasy failed assertion with randomly <ignored> param (and there is a match in the calls)FakeItEasy 使用随机 <ignored> 参数的断言失败(并且调用中有匹配项)
【发布时间】:2016-05-31 22:28:39
【问题描述】:

我正在尝试使用方法调用断言来实现单元测试。 (必须发生)

我正在使用以下代码:

[Fact]
        public void Should_set_setting_and_map_new_value_for_non_existing_setting()
        {
            //Arrange
            var userSetting = new SettingDetailsBuilder().Build();
            var respository = A.Fake<ISettingsRepository>();
            A.CallTo(() => respository.GetUserSetting(0, 0, null)).WithAnyArguments().Returns(userSetting);
            var dataretriever = new SettingsDataRetriever(respository);

            //Act
            var newUserSetting = dataretriever.SetUserSetting("variableName", "SomeOtherValue", 1, 1, "FST");

            //Assert
            A.CallTo(() => respository.GetUserSetting(1, 1, "variableName")).MustHaveHappened();
        }

但是我随机得到一个失败的测试,其中一些参数被称为“忽略”。但是,断言带有精确的参数。

错误:

Assertion failed for the following call:
    AlfaProNext.Repositories.Settings.ISettingsRepository.GetUserSetting(1, <Ignored>, <Ignored>)
  Expected to find it at least once but found it #0 times among the calls:
    1: AlfaProNext.Repositories.Settings.ISettingsRepository.Exists(varName: "variableName")
    2: AlfaProNext.Repositories.Settings.ISettingsRepository.GetUserSetting(
          userId: 1,
          profileId: 1,
          variableName: "variableName")

有人知道为什么会随机发生吗?

【问题讨论】:

  • 我看到你也用这个问题打开了 FakeItEasy 问题562。我已经回复了一些想法。

标签: unit-testing fakeiteasy


【解决方案1】:

这可能是由于 XUnit 2.0 在使用早于 2.0.0-beta009 的 FakeItEasy 版本时并行执行的测试。后者包括对issue 476 的修复,它使用That 和Ignored 线程安全进行参数约束。

如果可行,请考虑升级到最新的 FakeItEasy。 (您可以在GitHub Project 看到最新的更改。)或者在 XUnit 中关闭并行测试执行。

【讨论】:

    【解决方案2】:

    在 FakeItEasy 论坛的一些很好的反馈之后,我有了我的答案。显然,当前的稳定版本不是线程安全的,无法处理并行运行测试的最新版本的 XUnit 2。

    https://github.com/FakeItEasy/FakeItEasy/issues/562

    我的解决方法是将 FakeItEasy 升级到版本 2 beta 10。(替代方法是在单线程中运行测试)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-03
      • 1970-01-01
      • 2018-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多