Непрерывное поблочное тестирование с Pydev (Python и Eclipse)

Коротко и красиво. Никаких других зависимостей, кроме , расширенного стандарта C lib.

strcasecmp(str1.c_str(), str2.c_str()) == 0

возвращает true , если str1 и str2 равны. strcasecmp может не существовать, могут быть аналоги stricmp, strcmpi и т. Д.

Пример кода:

#include <iostream>
#include <string>
#include <string.h> //For strcasecmp(). Also could be found in <mem.h>

using namespace std;

/// Simple wrapper
inline bool str_ignoreCase_cmp(std::string const& s1, std::string const& s2) {
    if(s1.length() != s2.length())
        return false;  // optimization since std::string holds length in variable.
    return strcasecmp(s1.c_str(), s2.c_str()) == 0;
}

/// Function object - comparator
struct StringCaseInsensetiveCompare {
    bool operator()(std::string const& s1, std::string const& s2) {
        if(s1.length() != s2.length())
            return false;  // optimization since std::string holds length in variable.
        return strcasecmp(s1.c_str(), s2.c_str()) == 0;
    }
    bool operator()(const char *s1, const char * s2){ 
        return strcasecmp(s1,s2)==0;
    }
};


/// Convert bool to string
inline char const* bool2str(bool b){ return b?"true":"false"; }

int main()
{
    cout<< bool2str(strcasecmp("asd","AsD")==0) <<endl;
    cout<< bool2str(strcasecmp(string{"aasd"}.c_str(),string{"AasD"}.c_str())==0) <<endl;
    StringCaseInsensetiveCompare cmp;
    cout<< bool2str(cmp("A","a")) <<endl;
    cout<< bool2str(cmp(string{"Aaaa"},string{"aaaA"})) <<endl;
    cout<< bool2str(str_ignoreCase_cmp(string{"Aaaa"},string{"aaaA"})) <<endl;
    return 0;
}

Выход:

true
true
true
true
true
43
задан Tal Weiss 3 January 2011 в 10:57
поделиться

3 ответа

В Pydev есть некоторая интеграция с модульными тестами, но это только в качестве конфигурации запуска ... так что ...

Это не очень элегантный способ, но если вы:

  1. Включите Project-> Build Automatically
  2. В свойствах проекта добавьте новый построитель типа Program
  3. Настройте его для запуска ваших тестов и выберите 'во время auto builds '

Тогда, по крайней мере, вы получите что-то, что выводит результаты теста на консоль при сохранении ресурсов.

9
ответ дан 26 November 2019 в 23:06
поделиться

Я только что понял, что PyDev имеет довольно мощную поддержку скриптов. К сожалению, у меня нет времени сделать все это за вас (но если вы выполните это, опубликуйте его здесь :)

Если вы создадите файл с именем pyedit_nose.py , который выглядит так в в противном случае пустая папка:

assert cmd is not None
assert editor is not None

if cmd == 'onSave':
    from java.lang import Runtime
    from java.io import BufferedReader
    from java.io import InputStreamReader

    from org.eclipse.core.resources import ResourcesPlugin
    from org.eclipse.core.resources import IMarker
    from org.eclipse.core.resources import IResource

    proc = Runtime.getRuntime().exec('ls -al')
    extra_message = BufferedReader(InputStreamReader(proc.inputStream)).readLine()

    r = ResourcesPlugin.getWorkspace().getRoot()
    for marker in r.findMarkers(IMarker.PROBLEM, False, IResource.DEPTH_INFINITE):
        if marker.getAttribute(IMarker.MESSAGE).startsWith("Some test failed!"):
            marker.delete()

    for rr in r.getProjects():
        marker = rr.createMarker(IMarker.PROBLEM)
        marker.setAttribute(IMarker.MESSAGE, "Some test failed! " + extra_message)
        marker.setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH)
        marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR)

и настройте Preferences-> PyDev-> Scripting Pydev так, чтобы указывать на этот каталог, вы будете получать все проекты в вашей рабочей области, отмеченные ошибкой каждый раз, когда файл сохраняется.

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

См. некоторые отправные точки:

  • Скрипты Jython в Pydev
  • IMarker - это то, что представляет собой маркер.
  • IResource - это то, к чему вы прикрепляете свои маркеры. Это могут быть рабочие области, проекты, файлы, каталоги и т. Д. resource.createMarker (IMarker.PROBLEM) создает маркер проблемы.
  • IProject - это тип IResource , который представляет проект. Для получения содержимого используйте метод members () .
5
ответ дан 26 November 2019 в 23:06
поделиться

Я использую Nosy (доступно на pypi):

Запускать инструмент обнаружения и выполнения теста носа всякий раз, когда изменяется исходный файл .

0
ответ дан 26 November 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: