Модульное тестирование демона Apache Commons в Java

Iv исследовал и не может найти какой-либо достойный ресурс, который помог бы мне протестировать JUnit демон apache commons, написанный на Java. Я хотел бы иметь возможность проверить, что при запуске демона он запускается в обязательном порядке, а когда он выключается, он выключается в обязательном порядке.

Вот пример кода запуска и остановки демона через точку:

Обновить

public class MyDaemon implements Daemon
{
    private Logger myLogger = LogManager.getLogger(FileLoggerImpl.class);
    private List<FileLogger> loggers;
    private List<Thread> threads;

    public void init(DaemonContext arg0) throws DaemonInitException, Exception 
    {
        myLogger.info("Starting Logger");
        loggers = new ArrayList<FileLogger>();
        threads = new ArrayList<Thread>();
        myLogger.info("Finished starting Logger");
    }

    public void start() throws Exception 
    {

        if(threads.size()>0 || loggers.size()>0)
            stop();

        for(int i = 0; i < 1; i++)
        {
            FileLogger logger = new FileLoggerImpl(Integer.toString(i));
            Thread thread = new Thread(logger);
            loggers.add(logger);
            threads.add(thread);
            thread.start();
        }

    }

    public void stop() throws Exception
    {
        myLogger.info("Cleaning up threads...");
        for(int i = 0; i < 1; i++)
        {
            FileLogger logger = loggers.get(i);
            Thread thread = threads.get(i);
            logger.isExecuting(false);
            thread.join();
        }
        myLogger.info("Stopping thread");
    }
    public void destroy() 
    {
        myLogger.info("Destroying resources...");
        loggers = null;
        threads = null;
        myLogger.info("Destroyed resources.");
    }
    public static void main(String argsv[]) 
            throws Exception
        {
            MyDaemon myDaemon = new MyDaemon();

            myDaemon.init(null);
    myDaemon.start();
            Thread.sleep(30000);
            myDaemon.stop();

        }

}

Класс Logger читает текстовый файл и записывает случайные строки из этого текстового файла в файл журнала *

    public void run() 
    {
        String fileLocation = "/textFileLocation";
        while(isExecuting) 
        {
            try {
                logger.info(getRandomLineOpt(fileLocation));
            } catch (IOException e) {
                logger.warn("File :" + fileLocation +" not found!");
                e.printStackTrace();
            }
            pause(DELAY_SECONDS);   
        }
    }


 public String getRandomLine(String fileLoc) throws IOException
    {
        BufferedReader reader = new BufferedReader(new FileReader(fileLoc));
        //Commons IO
        ArrayList<String> lines = new ArrayList<String>();

        String line =null;
        while( (line = reader.readLine())!= null ) 
            lines.add(line);
        return lines.get(new Random().nextInt(lines.size()));
    }

Любая помощь высоко ценится.


person user1694873    schedule 05.05.2013    source источник


Ответы (1)


Поскольку в вашем примере кода отсутствуют некоторые важные факты, мы можем только догадываться, что вы пытаетесь сделать.

  • Я предполагаю, что MyDaemon является подклассом Thread. Если я прав, вам не следует использовать остановку для завершения работы (прочитайте http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html для получения дополнительной информации об этом).
  • Следующий момент: для проведения модульного тестирования вам нужен «модуль» для тестирования, то есть вам нужны некоторые методы, которые следует протестировать, где вы можете указать ожидаемый результат для определенных входных параметров.
  • Последний пункт: поскольку ваш код заканчивается вызовом остановки, вы не можете определить, был ли демон остановлен вызовом остановки или завершением работы всей виртуальной машины после достижения конца основного метода.
person mschenk74    schedule 05.05.2013
comment
Да, класс MyDaemon реализует Daemon и имеет связанный с ним один поток — сейчас я обновлю код, чтобы показать некоторые из моих методов. - person user1694873; 05.05.2013
comment
один факт, который все еще отсутствует в вашем примере, заключается в том, что вы используете демон из демона Apache Commons. - person mschenk74; 06.05.2013
comment
Я обновлю заголовок, это затрудняет / отличается от тестирования? - person user1694873; 06.05.2013
comment
Это мешает понять, в чем ваша проблема. Мой первый ответ был основан на совершенно других предположениях. - person mschenk74; 06.05.2013
comment
Нет проблем - спасибо за ваше время - person user1694873; 06.05.2013