xUnit의 [MemberData]에서 잘못된 유형을 사전에 방지!

2796 단어 테스트C#xUnit

0. 소개



모두, 한번은 xUnit의 [MemberData]로 이상한 타입을 붙여 버리는 것이 있겠지요?
아니? 나는 있어! ! ! (깨끗한 맛)


하지만 ToObjectCaster만 있으면 이대로!
자동으로 형의 부정합을 체크해 준다!


게다가, 예를 들어,


이런 것도!


ToObjectCaster를 사용하면 테스트 케이스 유형의 실수를 사전에 막을 수 있습니다!

1.xUnit 정보



애초에, xUnit에 대해서는 모른다고해서 사람은 ↓의 기사가 매우 알기 쉽기 때문에 읽어주세요! (적어서 설명이 귀찮기 때문이 아니다)
xUnit.net에서 단위 테스트 시작
.NET Core에서 단위 테스트 수행

테스트 케이스의 유형을 잘못하는 문제



xUnit의 [InlineData], [MemberData], [ClassData]를 사용할 때 IEnumerable를 반환하는 속성 메서드 클래스를 만듭니다. 그러나 모든 값이 object[]이므로 잘못된 유형의 값을 입력해도 실행할 때까지 오류가 발생하지 않습니다.
그래서 컴파일 단계에서 에러로 하기 위해 먼저 타입의 체크를 한 다음 object로 변환한다는 것을 생각합니다.
ToObjectCaster 클래스의 MakeCast 메서드에 의해 생성된 ToObj는 인수를 object[]로 변환하는 함수입니다.

2. 구현



번! ! ! ! ! !


(인수의 수만큼 형이 있으므로 당연히 당연하지만......)
(xUnit이 ValueTuple을 지원하는 경우라면 ......
(리포지토리는 없습니다 ......)

3.사이고에게



사실 이 기사에는 원래 자료가 있습니다.

Creating strongly typed xUnit theory test data with TheoryData
(TheoryData로 강하게 형식화 된 xUnit의 Theory 테스트 데이터 만들기)

↑ 기사의 방법은, 비 제네릭인 TheoryData 클래스로 IEnumerable를 구현해, 그것을 상속한 제네릭인 TheoryData 클래스로 형 체크용의 Add 메소드를 구현하고 있다, 라고 하는 느낌입니다.

이 기사의 방법은, 필자가 Enumrator에 익숙하지 않았기 때문에, IEnumerable의 구현은 List를 사용해, 그것을 초기화할 때에 형태를 체크해 object[]에 캐스트 하는 함수를 준비 한다는 것을 생각해 보았습니다.

원래 재료가 컬렉션 이니셜 라이저를 사용하여 아름답게 쓸 수 있기 때문에 그쪽이 더 좋을 수 있습니다.

끝까지 읽어 주셔서 감사합니다!

좋은 웹페이지 즐겨찾기