2013-08-20 1 views
1

Microsoft 코드 분석의 CA1062 규칙은 참조 형식 인수가 null과 함께 전달되지 않는지 확인합니다.Microsoft Code Analysis에서 공개적으로 액세스 할 수있는 메서드가 null 인 인수가 있는지 확인하는 이유는 무엇입니까?

공개적으로 액세스 할 수있는 방법 만 검사하는 이유는 무엇입니까? 내부 및 개인 방법도 확인해야합니까? null 인수가 전달되지 않는 내부 메소드를 어떻게 보장 할 수 있습니까?

내가 널 인수를 확인하지 않는 Roslyn September 2012 CTP에서, 다양한 구문 노드에 대한 internal 생성자합니다 (SyntaxList 클래스를 참조) 것을 리플렉터/ILSpy에주의 때문에 구문 노드의 public 팩토리 메소드가 할 반면 내가 부탁하고 null 인수를 확인하십시오. 이 경우 SyntaxList 생성자의 내부 용법이 null을 전달하지 않는다고 Microsoft는 어떻게 보장합니까?

+1

코드에서 이러한 종류의 검사를 수행하려는 경우 [Microsoft 코드 계약] (http://research.microsoft.com/en-us/projects/contracts/)은 다음과 같은 경우에 대한 정적 및 런타임 검사를 지원합니다. 그러한 오류. – Brian

답변

1

이 경우 SyntaxList 생성자의 내부 용도가 null을 전달하지 않는다고 Microsoft는 어떻게 보증합니까?

는 아마도 그들은 자신의 코드에 확신을 의미 테스트를 가지고 있기 때문에. 모든 입력 내용의 유효성을 검사하고 자신의 코드가 정확하다고 확신하는 경우 내 API에 대한 호출이 유효한 입력 값임을 확신 할 수 있습니다.

물론 구현에 버그가있을 수 있으며 일부 내부 메서드에 유효하지 않은 입력이 생성되거나 허용 될 수도 있습니다. 내부 호출에 대한 유효성 검사를 추가로 수행하려면 괜찮습니다. 하지만 공개 API 수준에서 유효성 검사가 가장 중요합니다.

+0

내부 클래스를 단위 테스트하는 경우 생성자에'null '을 전달하지 않고 유효한 단위 테스트가됩니까? 예를 들어 WithManyChildren 클래스는 WithManyChildren (ArrayElement [] children) {this.children = children;}을 생성자의 일부로 사용하고 이후의 'this.children' 사용법은 null이 아닌지 확인하지 않습니다. – cm007

+0

@ cm007 : 모든 것을 검증 할 것으로 예상되는 다른 테스트 코드를 통해서만 코드를 호출 할 수 있다는 것을 알고 있기 때문에 결코 문제가되지 않을 것이라고 생각하지는 마십시오. 다시 말하지만, * 당신은 *보다 철저하게 검증하고 그것을 테스트하기로 결정할 수 있습니다 ... 그러나 테스트 된 코드를 신뢰하는 것은 또한 유효한 철학입니다. –

+4

기록을 위해 Roslyn 구문의 "누락 된 null 검사"중 일부는 Debug.Assert 호출로 디버그 빌드에 있습니다. CTP와 같은 소매업에서는 생략됩니다. –