2010-02-19 4 views
4

리디렉션을 수행하는 컨트롤러 작업을 테스트하는 올바른 방법은 무엇입니까?cfwheels에서 단위 테스트 리디렉션을 수행하는 방법

업데이트 : 저는 CFWheels 프로젝트의 핵심 개발자입니다. 필자가이 질문을하는 이유는 현재 우리가 가지고있는 테스트 프레임 워크를 개선하기 위해 노력하고 있으며 CFWheels에서 이와 같은 방식으로 접근하고 구현하는 방법에 대해 궁금해합니다. 개발자가 자신의 응용 프로그램을보다 쉽게 ​​테스트 할 수 있도록하기 위해서입니다. .

업데이트 : 어떻게 테스트했는지 알아 냈습니다. 작업이 완료되고 디스패처로 다시 전달 된 후 리디렉션을 수행하기 위해 바퀴 컨트롤러 내부를 약간 다시 작성해야합니다. 이 접근법을 사용하는 유일한 방법은 redirectTo() 이후의 모든 코드가 적절한 예방 조치를 취하는 경우 제외하고 실행하는 것입니다. 여기에는 redirectTo() 문 다음에 return을 넣거나 액션에 조건부 검사를 넣어 redirectTo() 코드를 다른 코드와 분리하는 작업이 포함됩니다. 또한 redirectTo()가 수행 된 후에는 아무 것도 렌더링되지 않도록하는 작업이 포함됩니다.

+0

나는 보통 컨트롤러가 아니라 모델을 단위 테스트합니다. 어떤 MVC 프레임 워크를 사용하고 있습니까? – Henry

+0

@henry, 나는 당신의 대답에 대한 질문을 업데이트했습니다 : P – rip747

+0

이 질문의 제목을 "단위 테스트 리디렉션 방법"또는 "cfwheels에서 단위 테스트 리디렉션 방법"으로 변경하는 것이 좋습니다. 이러한 구문은 검색 엔진에서 사용자의 검색어와 일치 할 확률이 더 높습니다. 즉,이 페이지는 최고의 결과로 나타날 가능성이 더 큽니다. 그것은 당신에게 더 많은 대표를 의미하고, 같은 질문을 가진 사람들을 덜 찾습니다. –

답변

2

리디렉션 메커니즘을 여러 기능으로 나누면 테스트 할 수 있습니다. a) 대상 URL을 결정하는 함수와 b) 리디렉션을 수행하는 함수.

이 방법을 사용하면 functionA를 매우 쉽게 테스트 할 수 있으며 functionA는 테스트하려는 테스트입니다. 코드 을 썼습니다. 그것은 당신의 진정한 논리가있는 곳입니다. FunctionB는 귀하의 코드가 아닙니다. 그것은 ColdFusion의 배짱이며 CFLocation을 테스트하는 데별로 의미가 없습니다.

100 % 테스트 커버리지를 달성하려는 임무가 있다면 논리의 모든 다른 분기를 수행하는 functionA에 대해 10 번의 테스트를 수행 한 다음 functionB에 대해 하나의 테스트를 수행하여 리디렉션을 테리가 제안한 것. 그래서이 방법으로 10 대신에 1 회 느린 테스트 만받습니다.

파일 시스템, 웹 서비스, HTTP, FTP, 전자 메일 등 다른 시나리오에서이 접근법을 일반화 할 수 있습니다 : "제어 할 수있는 것을 추출하십시오 당신이 제어 할 수없고 테스트하고 싶지 않은 것들로 테스트하고 싶습니다. "

2

redirect를 false로 설정하고 cfhttp를 사용하여 적절한 URL로 컨트롤러를 호출 할 수 있습니다. 그런 다음 cfhttp result struct 결과를 테스트하십시오. 리다이렉트가 필요한 곳에 대한 정보가 있어야합니다.

+0

이 접근법에서 볼 수있는 유일한 문제는 테스트가 실제로 느리게 진행될 수 있다는 것입니다. http 요청을하지 않아도된다면 더 좋을 것입니다. 내가 생각한 접근법 중 하나는 redirectTo()와 함께 응용 프로그램 변수를 사용하여 테스트 중에 인수 struct를 반환하고 cflocation을 우회하는 것입니다. 내 유일한 문제는 redirectTo() 후에 다른 로직이있을 경우 어떤 일이 벌어 지는지입니다. – rip747

+1

당신이하고있는 일을 오해하지 않는 한 당신의 컨트롤러가 단위 테스트에 너무 오랜 시간이 걸리는 리다이렉트를한다면 뭔가 문제가 있다고 주장 할 것입니다. 이 경우 cfhttp에서 시간 초과를 설정하고 시간이 오래 걸리면 실패합니다. –