如何解决如何使用 AutoFixture 生成特定格式的数据? 电子邮件语言
public class User
{
public string UserName{ get; set; }
public string Language { get; set; }
public string Email{ get; set; }
}
我使用 XUnit 和 Autofixture 进行单元测试。我有一个测试方法如下:
[Theory,AutoData]
public async Task Shouldcreateuser(User user)
{
...
}
问题在于 Autofixture 为 User 类的所有属性创建随机字符串数据。有没有办法让 Autofixture 返回特定的数据格式,如下所示:
Language --> random data such as "EN","ES"
Email --> random email address: example@mail.com
解决方法
电子邮件
AutoFixture 能够使用 System.Net.Mail.MailAddress
类型生成电子邮件地址 OOTB。因此,您可以将属性类型从 string
更改为 MailAddress
,也可以在测试中手动设置。
[Theory,AutoData]
public void MailAddressTest(MailAddress email)
{
// Output: email = "7495f4c5-9f5c-4854-9cbd-e9d3bc53dfcd" <7495f4c5-9f5c-4854-9cbd-e9d3bc53dfcd@example.net>
Console.Out.WriteLine("email = {0}",email);
// Output: email = 48f2028f-f055-4745-bf1c-f710e141332a@example.com
Console.Out.WriteLine("email = {0}",email.Address);
}
语言
您可以尝试从 CultureInfo
获取语言代码。不幸的是,默认情况下 AF always generate InvariantCulture。如果您需要更多语言,则必须扩展 AF。这可以通过一个新的样本构建器来完成,它应该从所有可用的文化(或根据您的需要的任何其他文化子集)中随机选择一个文化:
public class RandomCultureGenerator : ISpecimenBuilder
{
private readonly ExactTypeSpecification _cultureTypeSpecification;
private readonly CultureInfo[] _cultures;
private readonly Random _random;
public RandomCultureGenerator()
{
_cultureTypeSpecification = new ExactTypeSpecification(typeof(CultureInfo));
_cultures = CultureInfo.GetCultures(CultureTypes.NeutralCultures);
_random = new Random();
}
public object Create(object request,ISpecimenContext context)
{
if (request == null)
return new NoSpecimen();
if (!this._cultureTypeSpecification.IsSatisfiedBy(request))
return new NoSpecimen();
var index = _random.Next(_cultures.Length - 1);
return _cultures[index];
}
}
用法:
[Fact]
public void GenerateRandomCulture()
{
var fixture = new Fixture();
fixture.Customize<CultureInfo>(c => new RandomCultureGenerator());
var culture = fixture.Create<CultureInfo>();
Console.Out.WriteLine("culture = {0}",culture.TwoLetterISOLanguageName);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。