我的構建器設置爲處理參數或屬性。這可能會改變未來,但現在這是我在我的建設者:在AutoFixture ISpecimenBuilder中使用RegEx時,爲什麼總是返回相同的值?
public class UserNameBuilder : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
var propertyInfo = request as PropertyInfo;
if (propertyInfo != null && propertyInfo.Name == "UserName" && propertyInfo.PropertyType == typeof(string))
{
return GetUserName();
}
var parameterInfo = request as ParameterInfo;
if (parameterInfo != null && parameterInfo.Name == "userName" && parameterInfo.ParameterType == typeof(string))
{
return GetUserName();
}
return new NoSpecimen(request);
}
static object GetUserName()
{
var fixture = new Fixture();
return new SpecimenContext(fixture).Resolve(new RegularExpressionRequest(@"^[a-zA-Z0-9_.]{6,30}$"));
}
}
我的用戶名對象是值類型對象,如下所示:
public class UserName : SemanticType<string>
{
private static readonly Regex ValidPattern = new Regex(@"^[a-zA-Z0-9_.]{6,30}$");
public UserName(string userName) : base(IsValid, userName)
{
Guard.NotNull(() => userName, userName);
Guard.IsValid(() => userName, userName, IsValid, "Invalid username");
}
public static bool IsValid(string candidate)
{
return ValidPattern.IsMatch(candidate);
}
public static bool TryParse(string candidate, out UserName userName)
{
userName = null;
try
{
userName = new UserName(candidate);
return true;
}
catch (ArgumentException ex)
{
return false;
}
}
}
用戶名類繼承自SemanticType是爲我的值類型提供基礎的項目。
每當我使用AutoFixture如下:
var fixture = new Fixture();
fixture.Customizations.Add(new UserNameBuilder());
var userName = fixture.Create<UserName>();
我總是得到值「......」我想每一次我會得到不同的值。我看到預期的行爲?
你用調試器來逐步通過它? – sln
在我的代碼中,是的,但沒有在AutoFixture源代碼中 – TortillaCurtain