2014-10-23 4 views
0

Я считаю, что в Eunit отсутствует проблема, связанная с тестированием многоузлового приложения. Я нашел это example, но, к сожалению, когда я бегу:Примеры использования Eunit для тестирования кластеризованного приложения

cluster_test_() -> 
    {node, foo, 
    fun (Node) -> 
     [?_assertEqual(pong, net_adm:ping(Node))] 
    end 
    }. 

я получаю:

undefined 
*** context setup failed *** 
** in function slave:start/5 (slave.erl, line 197) 
**exit:not_alive 

Я делаю что-то здесь не так?

В качестве опоры я также рассмотрел распространенный тест gproc here, но это manually starting несколько подчиненных узлов вместо использования встроенной функциональности Eunit.

Может ли кто-нибудь дать мне несколько примеров использования измерительного прибора node?

Спасибо,

ответ

0

Common Test было написано специально для тестирования больших систем.

Другое, что официальная документация вы можете найти очень хорошее введение в тему here. И глава evens заканчивается с small snippet как интегрировать существующие тесты eunit в Common Test.

+0

Спасибо, я надеялся сделать это с Eunit, вместо этого попробуем общий тест. – theburningmonk

0

Хм, у меня никогда не было возможности работать с подчиненными узлами, поэтому это не должно быть документированной функцией. Я предполагаю, что это закончилось в документах, пока я все еще думал, что это работает. Вероятно, мне придется исправить документы.

+0

Ха, преждевременная документация по функциям, я тоже несколько раз виноват: -P – theburningmonk

0

Если вы собираетесь использовать многоузловые тесты и eunit, имейте в виду, что eunit ifdefs в модулях изменяет свои контрольные суммы, и если вы скажете, что один модуль скомпилирован с помощью ifdef eunit, а другой - нет, у вас будут ошибки, если вы попытаетесь вызывать удаленные функции.

0

Мое предложение состоит в том, что вы запускаете главный узел с отключенным распределением. Включите его с -sname ключом (я полагаю, ваш пример кода находится в модуле node_test):

> erl -sname master 
([email protected])1> c(node_test). 
> node_test:test(). 

Но это не все. Для выполнения этого кода в новых версиях Эрла, вы должны сделать небольшие изменения:

cluster_test_() -> 
    {node, foo, 
    fun ({Node, StopNet}) -> 
     ?debugFmt("Node ~p", [Node]), 
     ?debugFmt("StopNet ~p", [StopNet]), 
     [?_assertEqual(pong, net_adm:ping(Node))] 
    end 
    }. 

Примечания, аргумент функции теперь содержит не имя узла, а кортеж с двумя элементами. Первый элемент - это имя удаленного узла, второе - логический флаг, который всегда является ложным (по крайней мере пока). Для получения дополнительной информации см. eunit sources

Смежные вопросы