2016-12-04 2 views
1

사용 단위 테스트 개인 방법 중 하나 방법이 있나요 크리스탈의 내장 spec 도서관은?개인 방법을 테스트하려면 어떻게해야합니까?

는 내가 PHP 배경에서 온, 거기 그것을 테스트 할 수 있도록 공개하는 방법의 접근성을 변경 ReflectionMethod::setAccessibility을 사용하는 것이 가능하다. Crystal API 문서에서 비슷한 것을 찾을 수 없으므로 그러한 것이 있는지 궁금합니다.

+3

를 사용하는 코드로, 당신은하지 단위 테스트 개인 방법을한다. –

+1

@ 500-InternalServerError는이 주장을 뒷받침하는 일부 출처를 공유합니까? 메소드의 가시성은 함수가 올바르게 작동하는지 여부와 관계가 없으며, 메소드가 제대로 작동하는지 확인하는 유일한 방법은이를 테스트하는 것입니다. 모든 개인 메서드를 테스트에서 제외하는 것은 위험한 전략처럼 들립니다. –

+0

사람들은 클래스 디자인이 구현 방법 세부 사항이므로 개인 메소드를 테스트 할 필요가 없다고 말했습니다. 그러나이 방법 (전체 테스트 범위가 목표 인 경우)은 결과적으로 많은 위임이 사용되는 매우 정교한 수준의 클래스 시스템이됩니다. – Codor

답변

2

나는 개인 방법을 테스트 할 수 없습니다 것을 동의합니다. 그러나 실제로 원한다면 클래스를 다시 열고 가시성 (공개)없이 메서드를 다시 정의하고 previous_def을 사용할 수 있습니다. 예를 들어 : 개인 방법보다

class Foo 
    private def bar(x, y) 
    x + y 
    end 
end 

# Reopen 
class Foo 
    # Redefine bar 
    def bar(x, y) 
    # Invoke the previous definition 
    previous_def 
    end 
end 

foo = Foo.new 
p foo.bar(1, 2) 
+1

정말로 생각하니, 테스트를 위해 특별한 방법을 추가해야합니까? 코드를 검사하기위한 테스트를 작성해야하지만 실행 테스트를위한 코드는 작성하지 말아야합니다. –

+0

은 테스트 된 메소드에서 개인 수정자를 사용하지 마십시오. 가시성 수정 기호가있는 언어와 마찬가지입니다. 크리스탈 클래스를 다시 할 수 있지만, 그래, 그것은 까다로운입니다. –

0

Crystal 경우 루비 같은 언어는 공공 방법으로 테스트해야합니다. 아니면 일반 통념에 따르면

관련 문제