참고로 에 대해 this question을 고려해야합니다.매개 변수의 유효성을 검사하는 올바른 순서는 무엇입니까?
public void DoSomething1(Dictionary<string, string> param1, Object param2)
{
if (null == param1)
throw new ArgumentNullException("param1");
if(!param1.Keys.Contains("somekey"))
throw new ArgumentException("param1 must contain key \"somekey\"");
if(null == param2)
throw new ArgumentNullException("param2");
// now we do some stuff
}
public void DoSomething2(Dictionary<string, string> param1, Object param2)
{
if (null == param1)
throw new ArgumentNullException("param1");
if (null == param2)
throw new ArgumentNullException("param2");
if(!param1.Keys.Contains("somekey"))
throw new ArgumentException("param1 must contain key \"somekey\"");
// now we do some stuff
}
두 방법 모두에있어서의 내부 동작에 동일한 보호를 달성한다 :
는 예를 들어 다음과 같은 두 가지 단편을하자. 내 질문은
...
방법에 전달 된 매개 변수를 테스트하는 올바른 방법/순서가 왜 (예 :이 예에서와 같이) 란 무엇입니까?
답변을 백업 해주십시오.
나는 이것이 "올바른 접근법"이라고 생각하지 않습니다. 이 경우 실제로는 선호의 문제처럼 보입니다. –
올바른 접근 방식이 합리적입니다. 예를 들어, param1에 대한 null 예외는 코드 샘플에서 수행하는 것처럼'Contains()'를 호출하기 전에 먼저 검사해야합니다. –
나는 둘 다 이해한다; param2의 유효성을 검사하기 전에 param1의 유효성을 완전히 검사해야합니까? 또는 테스트에서 가장 단순한 예외에서 복잡한 예외로 진행해야합니까? –