如何让 AutoFixture 创建一个大于 0 的整数,而不是另一个数字?
Posted
技术标签:
【中文标题】如何让 AutoFixture 创建一个大于 0 的整数,而不是另一个数字?【英文标题】:How to get AutoFixture create an integer that is >0, and not another number? 【发布时间】:2015-12-23 05:11:58 【问题描述】:我希望 AutoFixture 生成两个整数,而对于第二个整数,我不希望它为 0,或者之前生成的数字。有没有办法告诉 AutoFixture 遵守该“要求”。
看RandomNumericSequenceGenerator
,我看起来像lower limit is 1,所以我可能不必指定第一个要求。接下来,我正在查看“播种”选项,但正如 this answer 中所指出的,默认情况下它不会用于数字。
我在这里忽略了什么?
【问题讨论】:
你使用plain-AutoFixture还是AutoFixture.Xunit/NUnit? 不幸的是,使用 MSTest 的普通 AutoFixture。为什么?例如,Xunit 将如何提供帮助? AutoFixture.Xunit 的样板更少。请参阅下面的answer。 为什么不直接使用fixture.CreateMany(2)
呢?正如我从文档link 中了解到的那样,第二个数字将始终 > 0 而不是另一个数字。
好收获!是的,这更容易并且默认情况下可以使用,就像@MarkSeemann wrote。它也应该是公认的答案。
【参考方案1】:
这是一种使用普通 AutoFixture 的方法:
[Fact]
public void GenerateTwoDistinctNonZeroIntegersWithAutoFixture()
var fixture = new Fixture();
var generator = fixture.Create<Generator<int>>();
var numbers = generator.Where(x => x != 0).Distinct().Take(2);
// -> 72, 117
这是一种使用AutoFixture.Xunit 的方法:
[Theory, AutoData]
public void GenerateTwoDistinctNonZeroIntegersWithAutoFixtureXunit(
Generator<int> generator)
var numbers = generator.Where(x => x != 0).Distinct().Take(2);
// -> 72, 117
【讨论】:
这会起作用,但请求的行为不是 AutoFixture 的 默认 行为吗? 天啊,确实如此。当我第一次阅读原始问题时,我被欺骗了。 @AlexanderW 评论说,This 应该是答案。接得好!感谢您指出这一点。 @NikosBaxevanis 你是对的,我不接受你的回答。我不能接受马克的评论,因为这是评论,当然。也许马克可以“宣传”他的评论,所以我可以接受;)以上是关于如何让 AutoFixture 创建一个大于 0 的整数,而不是另一个数字?的主要内容,如果未能解决你的问题,请参考以下文章
.net测试篇之单元测试/集成测试神器Autofixture
.net测试篇之单元测试/集成测试神器Autofixture
csharp AutoFixture策略,用于调用基于Twitter讨论的大多数参数的工厂方法https://twitter.com/madstt/status/4208
csharp AutoFixture策略,用于调用基于Twitter讨论的大多数参数的工厂方法https://twitter.com/madstt/status/4208