2012-01-06 2 views
2

매개 변수를 전달하는 메소드를 호출합니다. 이 매개 변수가 특정 값과 같으면 스레드는 중지 될 때까지 반복적으로 작업을 시작합니다. 모든 반복에서 일부 값이 변경됩니다.
JUnit에서 이러한 값을 확인할 수있는 방법이 있습니까?JUnit 테스트 : 스레드에서 결과를 테스트하는 방법

+1

일부 코드를 참조하십시오. – dan

답변

3

스레드를 스폰하는 경우 더 이상 단위 테스트를 수행하지 않습니다. 통합 테스트입니다. 이 '값'을 변경하는 로직을 스레드 생성없이 테스트 할 수 있도록 코드를 리펙토링하십시오. 스레드를 생성하지 않고 작동한다면 스레드를 생성 할 때 작동 할 것입니다. (저는 제가 자신을 강의 중 하나에 설정했음을 알고 있습니다 ... 잠재적으로 공유 변수를 적절히 동기화해야하는지 확인해야합니다. 교착 상태를 유발할 수있는 코드가 있음).

코드를 보지 않고도 테스트 방법을 제안하기는 어렵습니다. 그러나 스레드를 생성하는 경우에는 단 단위 테스트가 아닙니다.

+1

나는 하나의 반복을 캡슐화하고 그것을 단위 테스트하기 위해'tick()'메소드가 필요하다고 말하고 싶다. 객체의 필드를 변경하는 대신 "일부 값"을 반환하면 테스트 (및 전체적인 디커플링)가 더 좋습니다. –

+0

@ 빅터 동의, 스레드 동작을보다 잘 캡슐화합니다. 그래도, 나는 'ticking'을 시작하기 전에 전체 행동 단위를 테스트하고 싶다 – BeRecursive

+0

죄송합니다. 코드를 제공하지 않으 셨습니다. 그것은 나의 대학을위한 프로젝트의 일부이며 나는 이것을 할 수 없다는 것을 두려워합니다. 내 코드가 작동해야하는 것처럼 작동하지만 내 프로젝트에 일부 JUit 테스트를 포함해야하기 때문에 코드의이 부분을 테스트 할 수있는 방법이 있는지 궁금합니다. 스레드를 만들고 스레드가 지정된 간격으로 반복을 수행합니다. 그래서 JUnit을 사용하여 테스트 할 수 없습니다. 고맙습니다! :) – anna

0

각 반복이 값을 적절하게 수정했는지 확인하기 위해 테스트하려는 경우 예상 입력을 사용하여 반복 코드를 호출하고 예상 출력을 테스트하십시오. 분리 각의 peice을 테스트

의사 자바 코드 :

for each (file : files) { 
    doSomething(file); // this updates some running totals or something 
} 

이 그럼 당신은 (여기서 모의 값이 적절하게 업데이트 할 경우 테스트하고보고 싶어 각 입력에 doSomething() 전화를 몇 가지 단위 테스트를 작성하려면 필요한). 그런 다음 스레드가 스폰되도록하고 결과 값을 확인하도록 통합 테스트를 수행하십시오.

관련 문제