2012-09-03 5 views
0

문자열 입력이 null 또는 비어 있는지 확인하는 메서드에 대한 일련의 호출을 포함하는 메서드가 있습니다. 비어있는 경우 두 번째 매개 변수를 false로 설정합니다.값을 반환하지 않는 메서드를 조롱하십시오

public bool inputsContainData() 
{ 
    bool validInputs = True; 

    _helper.StringContainsData(_view.FilePath1, validInputs); 
    _helper.StringContainsData(_view.FilePath2, validInputs); 

    //... 

    Return validInputs; 
} 

StringContainsData() 메소드에 DI'd 표현되는 클래스이다. 이 메소드는 결과 변수가 참조 유형이므로 아무 것도 반환하지 않습니다.

public void StringContainsData(string input, bool result) 
{ 
    if(string.IsNullOrEmpty(input)) 
    { 
     result = false; 
    } 
} 

내가 StringContainsData()을 조롱하고 특정 결과를 반환해야 캔트 때문에 몇 가지 문제를 가지고 임.

public bool StringContainsData(string input, bool result) 
    { 
     if(string.IsNullOrEmpty(input)) 
     { 
      if(result != false) 
      { 
       return false; 
      } 
     } 
     else 
     { 
      if(result == false) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 

는 따라서 = 진실이 아닌 거짓, 허위 사실, 진정한 => 최종 결과를 가지고 나를 중지 : 문은 다음과 같은 경우 내가 두 번째를 포함하면 내가 생각할 수있는 유일한 솔루션입니다.

더 좋은 방법이 있나요?

+5

귀하의 방법은 쓸모가 없습니다. 'StringContainsData' 내부의'result'에 대한 변경은 매개 변수가'ref' 또는'out' 매개 변수가 아니기 때문에 외부 메소드에서 볼 수 없습니다. –

+0

조롱하기 전에'StringContainsData'를 수정하십시오 ... 또한, 왜 그런 사소한 기능을 조롱합니까? – leppie

+1

다시 코드를 수정하십시오. 그것은 심지어 컴파일되지 않을 것이다. – leppie

답변

1

가장 간단한 방법은 호출을 연결하기 위해 구조 조정하는 것입니다.

다른 답변이 필요하지 않은 경우 이전 답변과 새 답변을 ANDing하면됩니다.

public bool StringContainsData(string aString, bool answerToDate) { 
    return answerToDate && !string.IsNullOrWhiteSpace(aString); 
} 

public bool inputsContainData() {   
    bool validInputs = True;   

    validInputs = _helper.StringContainsData(_view.FilePath1, validInputs);   
    validInputs = _helper.StringContainsData(_view.FilePath2, validInputs);   

    return validInputs;   
}   

또는 당신은 어떤 재미를 갖고 싶어

public bool inputsContainData() {   
    var inputs = new []{ _view.FilePath1, _view.FilePath2}; 
    return inputs.Aggregate(true, (ret, inp) => ret && !string.IsNullOrWhiteSpace(inp));   
} 

주 :

더 많은 파일 경로를 추가하려는 경우 마지막 버전은 그 자체에 대한 합병증처럼 보이지만 배열 연장 확인은 할당/호출 회선의 절단/과거보다 간단하고 안전합니다. 함수에서

먼저 단락 (& &)을 사용하여 RET 을 확인하는 것은 이미 실패한 경우, 우리는 현재의 입력을 체크 할 필요가 없다는 것을 의미한다.

+0

정확합니다. 나는 약간의 다른 접근법 (속성을 사용하고 InputSContainData() 메소드가 StringContainsData() 메소드를 포함하고 있기 때문에 거기에 논리를 가지고있다.) 그래서 나의 테스트 중 하나는 아직 작동하지 않는다. 그래서 나는 ur 솔루션에 의지할지 모른다. 결국. 당신의 도움을 주셔서 감사합니다. –

2

boolvalue type입니다. 이는 값이 메서드에 전달되며 참조는 전달되지 않음을 의미합니다.

public bool StringContainsData(string input, bool result) 
{ 
    return string.IsNullOrEmpty(input); 
} 

을 또는 당신은 당신이 원하는 아마하지 않은 ref/out를 사용할 수 있습니다

당신은 두 가지 옵션이 있습니다,이 같은 방법 StringContainsData에서 bool 결과를 반환 할 수 있습니다.

+1

@Hans Rudel 작성된 코드는 이전 결과를 고려하지 않습니다. 최초의 FilePath가 null이지만 2 번째의 FilePath가 사용되어 있지 않은 경우는, 패스가 빈 상태 (empty)의 패스가없는 것을 확인하고 싶은 경우에도, 진정한 결과가됩니다. – AlanT

+0

AlanT의 ans가 원래 질문에 더 적절하므로 답변을 전환했습니다. 여전히 귀하의 도움에 대한 + 답변을 통해 UR에 +1. –

관련 문제