2013-12-10 10 views
1

유형 테스트가 성공적으로 수행되어 JSON과 다시 연결될 수 있다는 속성이 있습니다. 나는 현재 내가 좋아하는 것이 무엇FsCheck를 사용하여 유형 목록 테스트

Check.Quick roundTrip<TypeName> 

를 호출하여 실행

let roundTrip<'a when 'a : equality> (x: 'a) = (toJSON >> ofJSON) x = x 

은 (내가 아는 유형 내 어셈블리를 스캔 나는 반사를 통해 얻을 형식의 목록을 통해이 속성을 실행 할 수있다 JSON 직렬화가 가능해야 함)

런타임에 목록에있는 유형에 대해이 속성을 실행할 수 있습니까? 테스트에서 모두 지정해야 할 필요가 있습니까?

답변

1

모든 유형에 대해 사용자 정의 생성기가 정의되어 있거나 내장 생성자에서 파생 될 수 있다고 가정하면 실제로 테스트 할 각 유형에 대한 왕복 방법의 MethodInfo를 인스턴스화하면됩니다. 그런 다음 각 유형에 대해 호출하는 과부하 Check.Method가 있습니다. 이렇게하면 컴파일 타임에 유형이있는 메소드를 호출 한 것처럼 표준 FsCheck 테스트가 실행됩니다. 같은

뭔가 : (죄송합니다, 컴파일되지 않은,하지만 가까이 있어야)

는 는
type Marker = class end 
let roundtrip<'a> = //as above 
let checkForTypes (ts:seq<Type>) = 
    let roundtripInfo = typeof<Marker>.DeclaringType.GetMethod("roundtrip") 
    ts 
    |> Seq.map (fun t -> roundtripInfo.MakeGenericMethod([|t|])) 
    |> Seq.iter (fun m -> Check.Method(Config.Quick, m)) 
는 는
+0

감사 커트는 좋은 일이! – Brownie