Java에서 동시성이 처음입니다. Junit을 사용하여 일부 코드를 테스트했지만 그 결과는 이상합니다. 아래 코드는 JUnit (Eclipse)로 실행할 때 콘솔에 아무 것도 쓰지 않지만 성공적으로 실행합니다.JUnit 이상 동작으로 멀티 스레드 코드 테스트
// Switch to test with good-old main method.
public static void main(String args[]) {
// code to create IndexFile and DictionaryFile...
...
Thread taskOne = new GetNameTask(packOneIndex, packOneDict);
Thread taskTwo = new GetNameTask(packTwoIndex, packTwoDict);
taskOne.start();
taskTwo.start();
}
을 그리고 이것은 작업입니다 : 내가 주요 방법으로 실행하는 경우
@Test
public void testGetNameWithMultithreading() {
// code to create IndexFile and DictionaryFile...
...
Thread taskOne = new GetNameTask(packOneIndex, packOneDict);
Thread taskTwo = new GetNameTask(packTwoIndex, packTwoDict);
taskOne.start();
taskTwo.start();
}
그러나, 그것은 작동
public class GetNameTask extends Thread {
public GetNameTask (IndexFile indexFile, DictionaryFile dictFile) {
this.dictFile = dictFile;
this.indexFile = indexFile;
}
@Override
public void run() {
Dictionary dictionary = new DICTDictionary(indexFile, dictFile);
System.out.println(dictionary.getName());
}
private final IndexFile indexFile;
private final DictionaryFile dictFile;
}
DICTDictionary를 구성 할 때, IO의 체인이
파일에서 사전 이름을 가져 오는 작업.
멀티 스레딩을 사용하여 IO 코드를 실행하는 것이 JUnit에서 작동하지 않을 수 있습니다.
편집 : 어떻게 작동 시키는가를 발견했습니다. JUnit은 단일 스레드에서 테스트를 실행하기 때문에 JUnit 스레드에 2 개의 작은 스레드를 결합하여 예상 결과를 얻어야합니다. 그래서, 이것은 작동합니다.
@Test
public void testGetNameWithMultithreading() {
// code to create IndexFile and DictionaryFile...
...
Thread taskOne = new GetNameTask(packOneIndex, packOneDict);
Thread taskTwo = new GetNameTask(packTwoIndex, packTwoDict);
taskOne.start();
taskTwo.start();
try {
taskOne.join();
taskTwo.join();
} catch (InteruptedException ie) {
ie.printStackTrace();
}
}
JUnit으로 멀티 헤드 코드를 테스트하는 더 쉬운 방법이 있습니까?
감사합니다.
당신은 이것에 흥미가있을 것입니다 : http://stackoverflow.com/questions/12159/how-should-i-unit-test-threaded-code – Grundlefleck