일부 매핑 방법을 테스트하는 단위이고 정수 유형의 대상 속성에 매핑되는 string 유형의 source 속성이 있습니다.AutoFixture를 사용하여 문자열 속성에 대해 익명의 숫자를 생성하십시오.
그래서 모든 문자열 속성이 아닌 특정 문자열 속성에 대해 익명의 정수로 소스 개체를 만들 것을 AutoFixture에서하고 싶습니다.
이것이 가능합니까?
일부 매핑 방법을 테스트하는 단위이고 정수 유형의 대상 속성에 매핑되는 string 유형의 source 속성이 있습니다.AutoFixture를 사용하여 문자열 속성에 대해 익명의 숫자를 생성하십시오.
그래서 모든 문자열 속성이 아닌 특정 문자열 속성에 대해 익명의 정수로 소스 개체를 만들 것을 AutoFixture에서하고 싶습니다.
이것이 가능합니까?
이 문제를 해결하는 가장 좋은 방법은이라는 이름의 이라는 특정 속성에 익명 숫자 값의 문자열 표현을 할당하는 create a convention based custom value generator입니다.
이public class Foo
{
public string StringThatReallyIsANumber { get; set; }
}
사용자 정의 값 생성기는 다음과 같이 보일 것이다 :
그래서,이 같은 클래스를 가지고 가정, 예를 제공하기 위해 여기
public class StringThatReallyIsANumberGenerator : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
var targetProperty = request as PropertyInfo;
if (targetProperty == null)
{
return new NoSpecimen(request);
}
if (targetProperty.Name != "StringThatReallyIsANumber")
{
return new NoSpecimen(request);
}
var value = context.CreateAnonymous<int>();
return value.ToString();
}
}
중요한 점은 사용자 정의이다 생성기는 StringThatReallyIsANumber
이라는 속성 (이 경우에는 ) 만 대상으로합니다.
당신의 테스트에서 사용하기 위해, 당신은 단순히 Fixture.Customizations
컬렉션을 통해 Fixture
인스턴스에 추가해야합니다 :
var fixture = new Fixture();
fixture.Customizations.Add(new StringThatReallyIsANumberGenerator());
var anonymousFoo = fixture.CreateAnonymous<Foo>();
고맙습니다, 나는 수업을 약간 업데이트, 그래서 생성자는 이름을 사용 매개 변수로 특성의. 따라서 나는 다른 장소에서도 수업을 사용할 수 있습니다. – Krimson
@Krimson Cool. 내가 도울 수있어서 기뻐요 :) –
이것은 GUID 기반 기본값 대신 특정 문자열 속성에 유효한 URL을 생성해야하는 경우에도 유용했습니다. –