최근에 .NET 어셈블리의 보호 된 메소드에 [TestInitialize]를 추가하는 것은 존중되지 않지만, 메소드를 공개하면 유닛 테스트 러너 (이 경우 Resharper)가 호출했습니다. 테스트 방법으로 과거에 여러 번 나타났습니다.
기술적으로 말하자면, 공개 방법만큼 사적인 방법에 쉽게 반영 할 수 있습니다. 사실상 리플렉션은 개인 메소드를 단위 테스트하는 데 사용되는 메소드입니다.
그렇다면 왜 모든 단위 테스트 방법을 공개해야합니까?
2
정말 좋은 질문입니다. 내가 들었던 유일한 좋은 주장은 SOLID 원칙의 일부인 "구현이 아닌 인터페이스에 대한 프로그램"이라는 원칙을 따른다는 것입니다.
—
Robert Harvey
클래스 테스트에 대해서는 이야기하지 않고 테스트 프레임 워크에서 호출하는 실제 테스트 메소드에 대해서는 이야기하지 않습니다.
—
jtiger
자바의 @RobertHarvey, 비슷한 제한의 이유 (예 : JUnit)는 프레임 워크 디자이너가 엉망이되고 싶지 않아
—
gnat
setAccessible
어떤 커스텀 SecurityManager에 의해 차단 될 수 있기를
이 디자인 결정은 광범위한 사용을 목표로하는 범용 프레임 워크에 대해 결정되었다는 점을 고려해야합니다. 그런 경우 디자이너가 최악의 상황을 가정하고 준비하는 것이 더 안전합니다. 회사 내부 프레임 워크 (원하는 보안 정책을 보장 할 수있는 기회)이거나 협소하고 전문적인 목적을 가진 도구 ( "액세스 할 수없는 구성원에 대한 뷰어") 인 경우 고려해야 할 다른 옵션이 있습니다
—
gnat
@GregBurghardt이 동작은 Nunit에서 발견되며 Microsoft가 작성하지 않은 다른 테스트 프레임 워크 일 수 있습니다. 이 질문을 한 이후 몇 년 동안 나는 .NET에 대해 더 많이 이해하지만 여전히 공정한 질문이라고 생각하며 의견에는 좋은 토론이 있습니다.
—
저스틴 친애하는