У меня есть код, который вызывает другой поток, а бизнес-логика - в методе run(). экс-код:Тестирование потоков с Junits
public class Test {
protected boolean stripObjects ;
protected boolean catcharchiveObjects
public void runZipper(boolean strip,boolean createarchive) {
stripObjects = strip;
catcharchiveObjects = createcatcharchive;
exThread czct = new exThread();
czct.start();
}
private class exThread extends Thread() {
public void run() {
try {
if (strip)
return;
if(checkAction())
{
....
}
//some business logic which generates a zipfile
}
catch (Exception e) {
}
}
}
}
Я написал JUnit для приведенного выше кода, как показано ниже.
public class JunitTest {
public void testRunZipper() {
Test testEx = new Test();
testEx.runZipper(false,true);
//assert statement to check whether zip file is created
}
}
Когда я запускаю тестовый тест Junit, он терпит неудачу, и почтовый индекс не создается.
Затем я запустил Junit в режиме отладки, и я вижу, когда вызывается czct.start(), он переходит в метод run. Но он сразу же вернулся к вызывающей функции, то есть runZipper().
Теперь я изменил run(), чтобы добавить sysout в качестве первого оператора в нем. Теперь, когда я запускаю Junit, он печатает все, что есть в sysout, а затем управление возвращается к runZipper().
Может ли кто-нибудь помочь мне в решении этого, чтобы он выполнял все инструкции в run().
Заранее спасибо.
Можете ли вы разместить [SSCCE] (http://sscce.org/)? Вы говорите о многих вещах, которые не отображаются в коде. –
Я не знаю, как это могло быть, они отлично работают на моем ПК – Jesse
Я изменил свой вопрос. Надеюсь, поможет. Но мне жаль, что я не могу дать компилируемый код и целые детали, так как он очень большой и конфиденциальный. – user2179627