2012-12-13 3 views
3

일부 _test 사례를 실행하는 데 필요한 이진 파일이 있습니다.리소스 파일 이동

현재이 파일의 상대 경로는 테스트에 하드 코드되어 있습니다. 폴더 계층에서 아무 것도 변경하고 테스트를 취약하게 만들면 테스트가 중단되므로 좋지 않습니다.

일반적으로이 파일과 리소스 파일을 처리 할 때 가장 좋은 방법이 있습니까?

+0

나는 이것에 @jnml을 쓰고 있는데,'go-binary'를 사용하여 컴파일 된 Go 파일에서 [시뮬레이션하는 방법]이있는 것 같다. (http://stackoverflow.com/a/12483181/720999) 꾸러미. 그것은 외부 종속성입니다. – kostix

답변

4

테스트 리소스 이름은 하드 코딩되어 있지만 경로는 필요하지 않을 수 있습니다.

(09:13) [email protected]:~/src/tmp/SO/13854048$ ls -a 
. .. a_test.go 
(09:13) [email protected]:~/src/tmp/SO/13854048$ cat a_test.go 
package foo 

import (
     "testing" 
     "io/ioutil" 
) 

func Test(t *testing.T) { 
     b, err := ioutil.ReadFile("foo") 
     if err != nil { 
       t.Fatal(err) 
     } 

     t.Logf("resource content is: %s", b) 
} 
(09:13) [email protected]:~/src/tmp/SO/13854048$ go test -v 
=== RUN Test 
--- FAIL: Test (0.00 seconds) 
a_test.go:11:   open foo: no such file or directory 
FAIL 
exit status 1 
FAIL  tmp/SO/13854048  0.005s 
(09:14) [email protected]:~/src/tmp/SO/13854048$ 

정확하지만 해당 자원이 없습니다. 그것을 창조합시다. CWD가 go test 다른 곳에서 호출 된 경우에도 올바른지

(09:14) [email protected]:~/src/tmp/SO/13854048$ echo blah > foo 
(09:14) [email protected]:~/src/tmp/SO/13854048$ go test -v 
=== RUN Test 
--- PASS: Test (0.00 seconds) 
a_test.go:14:   resource content is: blah 
PASS 
ok   tmp/SO/13854048  0.007s 
(09:14) [email protected]:~/src/tmp/SO/13854048$ cd 
(09:14) [email protected]:~$ go test -v tmp/SO/13854048 
=== RUN Test 
--- PASS: Test (0.00 seconds) 
a_test.go:14:   resource content is: blah 
PASS 
ok   tmp/SO/13854048  0.005s 
(09:14) [email protected]:~$ 

주 (위의 마지막 실행에서).

+0

하지만이 경우 리소스 파일은 내가 말할 수있는 한 원본 폴더에 있어야합니다. –

+0

네, 맞습니다. – zzzz