Я новичок в параллелизме в Java. Я использовал Junit для тестирования некоторых моих кодов, но результат странный. Приведенный ниже фрагмент кода ничего не записывает в консоль, когда я запускаю его с помощью JUnit (Eclipse), хотя он успешно выполняется.
@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();
}
Однако, если я запускаю с методом main, он работает:
// 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();
}
И это задача:
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 существует цепочка операций ввода-вывода для получения имени словаря из файла.
Есть ли вероятность, что выполнение кода ввода-вывода с использованием многопоточности не работает с JUnit?
РЕДАКТИРОВАТЬ : Я узнал, как заставить это работать. Поскольку JUnit выполняет тесты в одиночных потоках, поэтому я должен соединить свои 2 маленьких потока с потоками JUnit, чтобы получить ожидаемый результат. Итак, это работает.
@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?
С уважением.