2016-08-14 2 views
3

나는 (신체 POST를 통해) 요청과 함께 전달 된 파일을 web/images 아래의 특정 경로로 복사하는 컨트롤러가 있습니다. 경로는 특정 Controller에있는 속성에 의해 지정됩니다.기능 테스트에서 파일 복사를 모의하는 법

내가 뭘하고 싶은 것은 기능 테스트으로 테스트입니다,하지만 난 내 프로젝트에 파일을 덮어 쓸 좋아하지 않을, 나의 테스트 케이스가 보내기 전에 내가 vfs를 사용하거나 경로를 변경하려면 요청.

이렇게하려면 좋은 방법이 있습니까?

+0

* "하지만 내 프로젝트의 파일을 덮어 쓰는 것을 좋아하지 않을 것이다"* - 이것은 당신이 뭔가 잘못하고있는 것처럼 들린다. 이 목적으로 만 사용되는 디렉토리 (처음에는 비어 있음)에 코드가 기록되는지 확인하십시오. 그리고 프로덕션 환경에서 테스트를 실행하지 않습니까? 마지막으로, "의무가 파일을 복사하는 컨트롤러"를 테스트하고 싶다면 * 파일 시스템을 조롱하지 말고 실제 시스템을 사용하는 것이 더 좋습니다. 그렇지 않으면, 당신은 무엇을 테스트합니까? 모의의 행동? – axiac

+0

그것은 부분적으로 사실입니다. 항상 테스트해야하는 것에 달려 있습니다. 우리의 사고 방식을 독창적 인 해결책으로 바꾸지 마십시오. :) 컨트롤러의 임무가 특정 경로에있는 파일을 덮어 쓰고 git이 원래의 기본 파일을 추적하는 경우, 내가 테스트하고 싶은 것은 * 지정된 경로에 따라 컨트롤러가 파일을 교체하지만 컨트롤러에 원래의 기본 파일을 건드리지 않기를 바란다. 누락 된 부분은 테스트 및 품질 환경에서 테스트 할 수있는 원래 경로입니다. 하지만 TDD 개발을 위해서는이 테스트가 OK 이상이 될 수 있다고 생각합니다. 어쨌든 동작을 테스트하고 있습니다. 조언을 해주셔서 감사합니다. – Bertuz

답변

0

나 자신에 대답하려고합니다 : 나는 속성을 갖기 위해 내 코드를 리팩토링하는 파일을 복사하거나 덮어 쓸 경로를 지정합니다.

그런 다음 PHPUnit 클래스 내에서 개체 속성의 값을 vfsStream 경로로 바꿉니다. 이와 같이함으로써 실제 파일/경로를 건드리지 않고 필요한 동작을 얻을 수 있습니다. 모든 것이 가상 파일 시스템 내에 있으며 내 객체가이를 사용합니다.

매개 변수는 깨끗하고 재사용 가능한 코드에는 중요하지만 단위 테스트를 원할 때 더욱 중요합니다. 단위 테스트는 내가 필요하지 않을 때 하드 코드로 다시 돌아 가기 대신 모든 매개 변수를 매개 변수화하도록 돕고 있습니다 많은 시간. 단위 테스트 작성을 돕기 위해 접근성에 관계없이 메서드와 속성에 액세스하는 클래스를 만들었습니다.

PHPUnitUtils

은 좀 더 정교한 무언가가 이미 거기에 확신 해요,하지만이 클래스는이 순간에 내 요구를 fullfills. 희망이 도움이 :-)

0

일반적인 접근 방식은 환경 변수로 환경 사이에서 변경 될 수있는 구성을로드하는 것입니다.

업로드 경로는 다음 이것은 당신이 임시을 지정할 수 있습니다

$upload_path = getenv('WEB_IMAGE_UPLOAD_PATH') ? 
    getenv('WEB_IMAGE_UPLOAD_PATH') : 'web/images' 

수 (내가 전에 심포니를 사용하지 않은, 그래서 ENV에 도움이 도구가있을 수 있습니다 바르) (/tmp?) 디렉토리 통합 모드에서 서버를 시작할 때.


아 시원 (면책 조항 : 나는 PHP는 사람이 아니에요)는 PHP처럼 보인다는 기능 시험에 도움이 쉽게 정리를 허용 할 수 있습니다 IO 스트림을 가지고있다.

http://php.net/manual/en/wrappers.php.php#refsect2-wrappers.php-unknown-unknown-unknown-unknown-unknown-descriptios

나는 당신이 그 흐름 중 하나가 될 당신 'WEB_IMAGE_UPLOAD_PATH'을 설정할 수 있습니다 생각

+0

! 마침내 나는 내 길을 찾았고 헌신적 인 대답으로 문서화했다. 아래에서 자유롭게 의견을 말하십시오. – Bertuz

관련 문제