2012-06-18 15 views
5

Như trong tiêu đề, tôi muốn thử nghiệm một phương pháp như thế này:Làm thế nào để đơn vị kiểm tra một phương pháp mà chỉ đơn giản là bắt đầu một chủ đề với jUnit?

public void startThread() 
{ 
    new Thread() 
    { 
     public void run() 
     { 
      myLongProcess(); 
     } 
    }.start(); 
} 

EDIT: Đánh giá bởi comments Tôi đoán nó không phải là rất phổ biến để kiểm tra xem a thread bắt đầu hay không. Vì vậy, tôi đã điều chỉnh các câu hỏi ... nếu yêu cầu của tôi là 100% mã bảo hiểm nào tôi cần phải kiểm tra nếu thread đó bắt đầu hay không? Nếu vậy tôi thực sự cần một khung bên ngoài?

+2

Tôi nghĩ điều này sẽ hữu ích ở đây: http://stackoverflow.com/questions/12159/how-should-i-unit-test-threaded-code –

+0

tôi đã đăng giải pháp của mình ở đây: [nhập mô tả liên kết tại đây] (http://stackoverflow.com/a/39525700/3016686) –

Trả lời

6

Điều này có thể được thực hiện một cách thanh lịch với Mockito. Giả sử các lớp được đặt tên ThreadLauncher bạn có thể đảm bảo phương pháp startThread() dẫn đến một cuộc gọi của myLongProcess() với:

public void testStart() throws Exception { 
    // creates a decorator spying on the method calls of the real instance 
    ThreadLauncher launcher = Mockito.spy(new ThreadLauncher()); 

    launcher.startThread(); 
    Thread.sleep(500); 

    // verifies the myLongProcess() method was called 
    Mockito.verify(launcher).myLongProcess(); 
} 
+1

Tôi sẽ xem xét chế nhạo hoặc gián điệp lớp học dưới sự kiểm tra thực hành không tốt, thay vào đó, hãy kiểm tra xem myLongProcess' làm gì, phải làm điều gì đó, xác minh nó. cho lớp khác, Giả sử lớp đó để xác minh cuộc gọi. –

+1

Sự hiểu biết của tôi về câu hỏi là anh ta muốn kiểm tra nếu 'startThread()' meth od hiện nó là công việc của bắt đầu một sợi. Anh ta không hỏi làm thế nào để kiểm tra kết quả của 'myLongProcess()', tôi cho rằng anh ta đã biết cách làm điều này. –

+0

Cảm ơn, hãy xem EDIT. – mt22

1

Nếu bạn cần bảo hiểm 100%, bạn sẽ cần phải gọi startThread mà sẽ tung ra một sợi chỉ. Tôi khuyên bạn nên làm một số loại xác minh rằng các chủ đề đã được nhìn chằm chằm (bằng cách xác minh rằng một cái gì đó trong myLongProcess đang xảy ra, sau đó làm sạch các thread.Sau đó, bạn sẽ có thể làm phần còn lại của thử nghiệm cho myLongProcess bằng cách gọi phương thức đó trực tiếp từ thử nghiệm đơn vị của bạn.

Các vấn đề liên quan