2013-01-17 4 views
0

안녕하세요, 저는이 테스트를 위해 Junit 테스트 케이스를 작성하려고합니다. 테스트 케이스에서 assertrue (....)를 잡으려고 여기에 아무것도 반환하지 않기 때문입니다. SendMailTLS는 mysql에서 이메일 ids 가져 오기 메일을 보내는 별도의 클래스 (메인없이)입니다 .Updates는 웹 사이트에서 값을 가져 와서 mysql에 저장하는 별도의 클래스입니다. 내가 asserttrue/assertequals 내가 프로그램을 실행하는 경우에도 계속 Thread.sleep(1000 * 60 * 1); 주석. 이 경우 어떻게 테스트 할 수 있습니까? 제안은 감사하겠습니다.스레드에 대한 Junit4 테스트 케이스

public class Scheduler implements Runnable { 

    public void run() { 
     while(true) 
     { 
      SendMailTLS mail= new SendMailTLS(); 
      Updates Employee= new Updates(); 

      try { 
       mail.Mail(); 
       Employee.update();    
       Thread.sleep(1000 * 60 * 1); 
      } 
      catch{ 
      //catch code here 

      } 

      System.out.println("Scheduler Task Complete"); 
     } 
    } 

    public static void main(String args[]) { 
      (new Thread(new Scheduler())).start(); 
     } 
} 

답변

1

테스트 할 수있는 방법 중 하나는 메소드를 실행 한 후 클래스 업데이트로 저장 한 DB의 내용이 올바른지 여부입니다. 전자 메일을 보내면 테스트하는 것이 어려울 것이라고 생각합니다. 최근에 비슷한 상황이 발생했지만 이메일 전송 클래스가 이메일 내용을 데이터베이스에 저장 했으므로 메일 데이터가 DB에 제대로 저장되었는지 확인했습니다. SendMailTLS가 업무에 관한 정보를 남기고 있습니까? 그렇다면 테스트 해 볼 수 있습니다. 메소드가 무한대로 실행된다는 사실은 문제가 될 필요가 없습니다. 테스트에서 일부 데이터를 준비하십시오 (예 : DB). 테스트에서 잠시 기다린 후 시스템의 상태 (예 : DB의 데이터)가 올바른지 확인하는 것보다 좋습니다. JUnit 스레드가 끝난 후에는 스레드를 분리해야합니다 (JUnit 스레드가 더 이상 실행되지 않으면 다른 스레드가 종료 될 것이라고 생각합니다).

+0

ur 제안 해 주셔서 감사합니다. 클래스 메일과 업데이트를 별도로 확인한다고 말하면서 모든 전자 메일 + 업데이트 + 스레드를 실행할 수있는 단일 테스트 케이스가 필요하다고 추측합니다. 이메일 질문이 없습니다. SendMailTLS 클래스는 아무 것도 반환하지 않습니다. 보내는 임시 변수를 만들고 1로 설정하고 해당 변수가 1인지 아닌지를 테스트 케이스에서 확인합니다. 업데이트 클래스에 대해 동일한 계획을 세우려고합니다. 여기 코드 커버리지를 최대로 유지하기 만하면됩니다. D. 내 기능 대부분은 괜찮습니다. – HkFreaKuser1673718

관련 문제