2015-02-03 3 views
0

초록이 붙어있는 상태에서 빨간색을 호출 할 수있는 상황이 있습니까? 방법 자체는 반환되지 않았기 때문에 여전히 코드에 도달한다 단위 테스트 범위, 모양Response.Redirect unreachable code

Unreachable code snippet

답변

4

. 그러나 사용중인 자동 테스트가 실제로 HTTP 컨텍스트에 참여하는 경우 응답이 끝나면 다른 코드에 도달하지 않습니다.

당신은 Redirect()false를 전달하여 끝에서 응답을 방지 할 수 있습니다 :

Response.Redirect(PageRedirect, false); 

그러나이 아마 나쁜 생각이다. 이 코드가 수행하는 논리적 인 흐름을 고려하십시오. 리디렉션은 응답이어야합니다. 더 많은 서버 측 처리가 필요하다면 끝내지 않을 수도 있지만 꽤 직관력이 떨어지는 경우가 있습니다. 그러나 해당 서버 측 프로세싱이 이고 다른 리디렉션 인 경우, 그게 무엇일까요? 사용자를 두 번 리디렉션 하시겠습니까? 한 번 리디렉션하고 두 번째를 무시 하시겠습니까? 첫 번째를 무시하고 두 번째 리디렉션을 수행 하시겠습니까? 꽤 직관력이 없습니다.

응답 이 리디렉션에서을 종료하도록 코드를 구성하는 것이 좋습니다. 기술적으로는 return이 아니지만이 컨텍스트에서는 논리적으로 하나처럼 취급해야합니다.

+0

이 스 니펫 아래의 코드는 예외없이 실행하려면 "A"= true이고 그 아래에 "A"= false이면 빨간색 선을 제거하고 녹색 선을 변경하면 예외가 throw됩니다. Response.Redirect PageRedirect, false); Context.ApplicationInstance.CompleteRequest(); – sammarcow

+0

@sammarcow : 당신이 무엇을 요구하고 있는지 분명하지 않습니다. 요점을 보여주는 코드 샘플로 질문을 업데이트 할 수 있습니까? 어쨌든 내가 제안하는 바는 리디렉션 아래에 추가 코드가 있어서는 안된다는 것입니다. 웹 응용 프로그램의 논리적 컨텍스트에서 리디렉션은 종료 조건이어야합니다. – David

1

HttpResponse.Redirect(url)이 실행되지 않으면 대부분의 코드 분석기가 코드를 알아 내지 못합니다. 따라서 컴파일러/분석가가 빨간색 코드가 잘못된 것일 수도 있습니다.

실수로 더 많은 요청 처리 코드를 실행하지 않으려면 항상 ThreadAbort 예외가 throw됩니다. HttpResponse.Redirect.