2016-11-28 6 views
0

일부 코드에서는 문자열 길이가 2^32보다 작은 지 확인하는 테스트가 있습니다. 그러나 테스트를 위해 더 큰 문자열을 생성하면 아마도 메모리 부족 오류로 인해 테스트 프로그램이 중단 될 수 있기 때문에 테스트하기가 어렵습니다.Go에서 거대한 문자열 길이의 단위 테스트 적용 범위?

어떻게하면 100 % 테스트 커버리지를 얻을 수 있을지 모르지만 그런 경우에도 여전히 안전하다고 테스트 할 수 있습니까? 당신의 코드를 리팩토링 테스트를 변경할 수있는 함수의 외부 한계를 이동

+0

나는주의 것 Go의 몇 가지 프로젝트가 유용한 측정 기준이 아니기 때문에 100 % 테스트 커버리지를 유지하려고합니다. 결국 당신은 쓸모 없거나 심지어는 망가진 테스트로 끝나기도하고, 종종 테스트를 실행하기 위해 어색하게 코드를 리팩토링하도록 강요합니다. – JimB

+0

동의합니다. 또한 모든 것을 테스트하지 않고도 100 % 적용 범위가 가능합니다. – chmike

+0

나는 당신이 의미하는 것을 발견했다. 이 문제는 표준 lib 함수가 반환 한 오류 코드를 테스트 할 때 나타납니다. 오류 코드의 반환을 유도하기가 어려울 수 있습니다. – chmike

답변

3

:

var limit = 1 << 32 

var ErrTooLarge = errors.New("String is too large!") 

func Process(s string) error { 
    if len(s) > limit { 
     return ErrTooLarge 
    } 
    // All OK 
    return nil 
} 

테스트는 :

func TestProcess(t *testing.T) { 
    // Save limit and restore it at the end: 
    old := limit 
    defer func() { limit = old }() 

    // Test success 
    if err := Process("123"); err != nil { 
     t.Errorf("Expected success, got: %v", err) 
    } 

    // Test failure (too large string) 
    limit = 5 
    if err := Process("123456"); err != ErrTooLarge { 
     t.Errorf("Expected ErrTooLarge, got: %v", err) 
    } 
} 

go test -cover 실행 :

PASS 
coverage: 100.0% of statements 
ok  play 0.001s 
+0

우수. 그걸 생각하지 않았어. 나의 한도는 일정했다. 일단 당신이 그것을 보게되면 명백합니다. – chmike