FakeItEasy 断言随机 <ignored> 参数失败(调用中有匹配项)
FakeItEasy failed assertion with randomly <ignored> param (and there is a match in the calls)
我正在尝试使用方法调用断言实施单元测试。 (一定是发生了)
我正在使用以下代码:
[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();
}
但我随机得到一个失败的测试,其中一些参数被提到为 "ignored"。但是,断言具有精确的参数。
错误:
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")
有人知道为什么会随机发生这种情况吗?
这可能是由于 XUnit 2.0 在使用早于 2.0.0-beta009 的 FakeItEasy 版本时并行执行测试。后者包括对 issue 476 的修复,它使用 That
和 Ignored
线程安全进行参数约束。
如果可行,考虑升级到最新的FakeItEasy。 (您可以在 GitHub Project 查看最新的更改。)或者在 XUnit 中关闭并行测试执行。
在 FakeItEasy 论坛的一些很好的反馈之后,我得到了答案。显然,当前的稳定版本不是线程安全的,无法处理最新版本的 XUnit 2,后者 运行 并行测试。
https://github.com/FakeItEasy/FakeItEasy/issues/562
我的解决方法是将 FakeItEasy 升级到版本 2 beta 10。(替代方法是 运行 在单线程中进行测试)
我正在尝试使用方法调用断言实施单元测试。 (一定是发生了)
我正在使用以下代码:
[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();
}
但我随机得到一个失败的测试,其中一些参数被提到为 "ignored"。但是,断言具有精确的参数。
错误:
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")
有人知道为什么会随机发生这种情况吗?
这可能是由于 XUnit 2.0 在使用早于 2.0.0-beta009 的 FakeItEasy 版本时并行执行测试。后者包括对 issue 476 的修复,它使用 That
和 Ignored
线程安全进行参数约束。
如果可行,考虑升级到最新的FakeItEasy。 (您可以在 GitHub Project 查看最新的更改。)或者在 XUnit 中关闭并行测试执行。
在 FakeItEasy 论坛的一些很好的反馈之后,我得到了答案。显然,当前的稳定版本不是线程安全的,无法处理最新版本的 XUnit 2,后者 运行 并行测试。
https://github.com/FakeItEasy/FakeItEasy/issues/562
我的解决方法是将 FakeItEasy 升级到版本 2 beta 10。(替代方法是 运行 在单线程中进行测试)