bkq*_*kqc 5 .net c# autofixture
我有一个包含 char 属性的对象。对于我的测试,我需要将该属性设置为除 I 或 R 之外的任何内容。是否有任何东西,理想情况下是 AutoFixture 原生的,我可以做的比我想出的代码更简洁、更简洁?
这是对象的表示
public class MyObject
{
public char MyProperty {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用的解决方案
MyObject = _fixture.Create<MyType>();
if ((new char[] { 'I', 'R' }).Contains(MyObject.MyProperty))
MyObject.MyProperty = new Generator<char>(_fixture).Where(c => !new char[] { 'I', 'R' }.Contains(c)).First();
Run Code Online (Sandbox Code Playgroud)
ElementsBuilder在这里似乎是一个不错的候选者,只要您愿意创建一个可接受字符的 while 列表,而不是一个黑名单。
这是一个使用您的MyObject定义的快速示例。
var fixture = new Fixture();
// A-Z, minus I, R.
fixture.Customizations.Add(new ElementsBuilder<char>("ABCDEFGHJKLMNOPQSTUVWXYZ"));
var createdCharacters = fixture
.Create<Generator<MyObject>>()
.Take(1000)
.Select(f => f.MyProperty)
.ToList();
CollectionAssert.DoesNotContain(createdCharacters, 'I');
CollectionAssert.DoesNotContain(createdCharacters, 'R');
Run Code Online (Sandbox Code Playgroud)
如果您需要更多的细微差别(例如,其他对象可以使用 I 或 R 字符),则可以使用自定义ISpecimenBuilder。