我最近将this正则表达式模式属性应用于我的类中的一个属性,以便评估有效的网址格式。现在出现的问题是AutoFixture无法创建显示错误的实例
“AutoFixture无法从中创建实例 Ploeh.AutoFixture.Kernel.RegularExpressionRequest,很可能是因为 它没有公共构造函数,是抽象的或非公共的类型。“
我尝过了一些像
这样的建议var contact = _fixture.Build<ContactEntity>()
.With(c=>c.Customer.Website,
new SpecimenContext(_fixture)
.Resolve(new RegularExpressionRequest(Constants.UrlRegex)))
.Create();
和
public class WebsiteSpecimenBuilder: ISpecimenBuilder
{
public object Create(object request,
ISpecimenContext context)
{
var pi = request as PropertyInfo;
if (pi!=null && pi.PropertyType == typeof(string)
&& (pi.Name.Equals("Email") || pi.Name.Equals("Website")))
{
//tried both of these options
return (new OmitSpecimen() || "http://www.website.com";
}
return new NoSpecimen(request);
}
}
但我仍然无法通过autofixture来创建课程。我是否遗漏了要创建它的东西,或者这个正则表达式是否太复杂,无法自动处理?
答案 0 :(得分:5)
我似乎已经通过使用自定义方法获得了解决方案:
_fixture = new Fixture();
_fixture.Customize<CustomerEntity>(ce =>
ce.With(x => x.Website, "http://suchTest.verwow"));
这将返回调用客户以拥有此网站(或其他正则表达式属性)的任何实例。我真的不知道autofixture中的某些东西是否优先于为什么这个在设置网站时工作,而其他人没有。但它是一个允许我的测试工作的解决方案
答案 1 :(得分:1)
您应该检查传递给RegularExpressionRequest()的正则表达式
new RegularExpressionRequest(Constants.UrlRegex)
正则表达式应为生成类型,而不是验证。例如,可以如下
string TopicSuffixValidation = @"[a-zA-Z0-9]{1,5}/[a-zA-Z0-9]{1,5}"