2011-11-16 3 views
0

코드를 테스트 할 때 테스트를 위해 자체 main을 사용하는 것이 좋은 생각입니까? 다른 옵션은이 테스트에서 외부 파일을 사용하는 것입니다.클래스를 자체 메인에서 테스트하는 것이 좋은 생각입니까?

예 :이 기술의 장점과 단점은 무엇

Class Foo{ 
    Foo(){/*...*/} 
    public boolean met1(){/*...*/} 
    //other metodes... 

    //Tests 
    public static void main(String args[]){ 
     Foo f = new Foo(); 
     //Test the correctness of data... 

     boolean r = f.met1(); 
     //check the result... 
    } 
} 

. 아마 언급하지 않은 코드를 테스트하는 더 나은 방법이있을 수 있습니다.

+0

좋은 연습인지 확실하지 않지만 매우 편리합니다! –

답변

3

자동으로 수행 할 수있는 테스트 인 경우 JUnit 등의 외부 파일을 사용해야합니다. 모든 테스트 실행, 지속적인 통합, 좋은 녹색 및 빨간색 선으로 다시보고, 등등 ...

만약 당신이 무엇을 어떻게 보이는지 볼 수 있고 수동으로 장소를 클릭하여 무슨 일이 일어나고 싶은지 GUI 요소라면 괜찮습니다. main()을 사용합니다. 그와 같이 설명하십시오.

마찬가지로, 프로그래머가 디버거에서 진행중인 작업을 테스트하고, 명령 행 args를 변경하는 등의 복잡한 작업 인 경우 o.k입니다. main()을 사용합니다. 그와 같이 설명하십시오.

+0

동의합니다. 주로 누가 코드를 실행하는지 질문합니다. 실행 가능한 경우 연속 통합 서버에 의해 자동으로 실행되기를 원합니다. 이러한 경우에는 JUnit과 같은 테스트 프레임 워크가 필요합니다. IMHO를 고려해야 할 다른 사항은 테스트 코드로 생산 코드를 혼란스럽게하지 않는지 확인하는 것입니다. – Puce

0

그다지 중요하지 않지만 main 메소드 내부에서 클래스의 private static 클래스 필드를 사용할 수 있다는 점에서 같은 클래스 내에서 main 메소드를 사용하면 얻을 수있는 이점이 있습니다. 예를 들어

: 당신은이 결과를 확인하기 위해 완료되었을 때 당신의 코드를 실행하려면

public class Foo 
{ 

    private static String someText = "blah blah"; 

    public Foo(){/*...*/} 

    public static void main(String args[]) 
    { 
     System.out.println(someText); 
    } 
} 
1

그것은 OK입니다. 하지만 특별한 Main 클래스를 선호하며이 메소드를 호출합니다 (많은 클래스에서 정크 코드를 사용하지 않는 것). 하지만 어쨌든 JUnit 테스트가 훨씬 좋습니다.

0

나는 당신이 필요로하는 것보다 큰 클래스를 만드는 것 외에 다른 단점이 있다고 생각하지 않는다. 그러나 실수를 피할 수있는 프레임 워크의 일부로 형식화 된 테스트를 작성하는 데 낭비되는 노력을 고려해야합니다.

관련 문제