Модульное тестирование кода C [закрыто]

Подключение к MYSQL с помощью Python за 3 шага

1 - Настройка

Перед выполнением чего-либо вы должны установить драйвер MySQL. В отличие от PHP, по умолчанию с помощью Python установлен только драйвер SQLite. Наиболее используемый пакет для этого - MySQLdb , но его сложно установить с помощью easy_install.

Для пользователя Windows вы можете получить exe из MySQLdb ,

Для Linux это случайный пакет (python-mysqldb). (Вы можете использовать sudo apt-get install python-mysqldb (для дистрибутивов на основе debian), yum install MySQL-python (для rpm-based) или dnf install python-mysql (для современного fedora distro) в командной строке для загрузки.)

Для Mac , вы можете установить MySQLdb с помощью Macport .

2 - Использование

После установки перезагрузить. Это не обязательно, но это помешает мне ответить на 3 или 4 других вопроса в этом сообщении, если что-то пойдет не так. Поэтому, пожалуйста, перезагрузитесь.

Тогда это похоже на любой другой пакет:

#!/usr/bin/python
import MySQLdb

db = MySQLdb.connect(host="localhost",    # your host, usually localhost
                     user="john",         # your username
                     passwd="megajonhy",  # your password
                     db="jonhydb")        # name of the data base

# you must create a Cursor object. It will let
#  you execute all the queries you need
cur = db.cursor()

# Use all the SQL you like
cur.execute("SELECT * FROM YOUR_TABLE_NAME")

# print all the first cell of all the rows
for row in cur.fetchall():
    print row[0]

db.close()

Конечно, есть тысячи возможностей и вариантов; это очень простой пример. Вам нужно будет посмотреть документацию. Хорошая стартовая точка .

3 - Более продвинутое использование

Как только вы знаете, как это работает, вы можете захотеть использовать ORM , чтобы избежать написания SQL вручную и манипулировать вашими таблицами, поскольку они были объектами Python. Наиболее известным ORM в сообществе Python является SQLAlchemy .

Я настоятельно рекомендую вам использовать его: ваша жизнь будет намного проще.

Недавно я обнаружил еще одну жемчужину в мире Python: peewee . Это очень простой ORM, очень простой и быстрый для настройки, а затем использовать. Это делает мой день для небольших проектов или самостоятельных приложений, где использование больших инструментов, таких как SQLAlchemy или Django, является излишним:

import peewee
from peewee import *

db = MySQLDatabase('jonhydb', user='john', passwd='megajonhy')

class Book(peewee.Model):
    author = peewee.CharField()
    title = peewee.TextField()

    class Meta:
        database = db

Book.create_table()
book = Book(author="me", title='Peewee is cool')
book.save()
for book in Book.filter(author="me"):
    print book.title

Этот пример работает из коробки. Не требуется ничего, кроме наличия peewee (pip install peewee).

821
задан 2 revs, 2 users 80% 8 February 2017 в 00:12
поделиться

21 ответ

Одна платформа поблочного тестирования в C Проверка ; список платформ поблочного тестирования в C может быть найден здесь и воспроизводится ниже. В зависимости от того, сколько стандартных библиотечных функций Ваше время выполнения имеет, Вы можете или не быть в состоянии использовать одного из тех.

AceUnit

AceUnit (Усовершенствованный C и Встроенная Единица) счета сама как удобная среда тестирования элемента кода C. Это пытается имитировать JUnit 4.x и включает подобные отражению возможности. AceUnit может использоваться в средах ограничения ресурсов, например, разработке встроенного программного обеспечения, и значительно он хорошо работает в средах, где Вы не можете включать единственный стандартный заголовочный файл и не можете вызвать единственный стандарт C функция из библиотек ANSI / ISO C. Это также имеет порт Windows. Это не использует ветвления для захвата сигналов, хотя авторы выразили интерес к добавлению такой опции. Посмотрите домашняя страница AceUnit .

Автоединица GNU

Очень в том же направлении как Проверка, включая разветвление для выполнения модульных тестов в отдельном адресном пространстве (на самом деле, исходный автор Проверки одолжил идею у Автоединицы GNU). Использование Автоединицы GNU, Бойкое экстенсивно, что означает, что соединение и такая потребность специальные опции, но это не может быть большой проблемой Вам, особенно если Вы уже используете GTK или Бойкие. Посмотрите домашняя страница Автоединицы GNU .

Кунит

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

Кунит

Стандарт C, с планами относительно реализации GUI Win32. В настоящее время не разветвляет или иначе защищает адресное пространство модульных тестов. В ранней разработке. Посмотрите домашняя страница Кунита .

CuTest

А простая платформа со всего одним.c и одним.h файлом, что Вы заскакиваете в свое исходное дерево. Посмотрите домашняя страница CuTest .

CppUnit

главная платформа поблочного тестирования для C++; можно также использовать его для тестирования кода C. Это стабильно, активно разработанное и имеет графический интерфейс. Основные причины для не использования CppUnit для C являются первыми, что это является довольно большим, и вторым, необходимо записать тесты в C++, что означает, что Вам нужен компилятор C++. Если эти don’t походят на проблемы, это определенно достойно рассмотрения, наряду с другими платформами поблочного тестирования C++. Посмотрите домашняя страница CppUnit .

embUnit

embUnit (Встроенная Единица) является другой платформой модульного теста для встроенных систем. Этот, кажется, заменяется AceUnit. Встроенная домашняя страница Единицы .

MinUnit

А минимальный набор макросов и that’s это! Точка должна показать, насколько легкий это - к модульному тесту Ваш код. Посмотрите домашняя страница MinUnit .

Кунит для г-на Ando

А реализация Кунита, которая является довольно новой, и по-видимому все еще в ранней разработке. Посмотрите Кунит для домашней страницы г-на Ando .

Этот список обновился в марте 2008.

[еще 1117] платформы:

CMocka

CMocka является средой тестирования для C с поддержкой фиктивных объектов. Это просто в использовании и установка.

См. домашняя страница CMocka .

Критерий Критерия

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

Посмотрите домашняя страница Критерия для получения дополнительной информации.

HWUT

HWUT является общим инструментом Unit Test с большой поддержкой C. Это может помочь создать Make-файлы, генерировать значительные тестовые сценарии, кодированные в минимальных 'итеративных таблицах', идти по конечным автоматам, генерировать C-тупики и т.д. Общий подход довольно уникален: Вердикты основаны 'на хорошем stdout/bad stdout'. Функция сравнения, тем не менее, гибка. Таким образом любой тип сценария может использоваться для проверки. Это может быть применено к любому языку, который может произвести стандартный вывод.

См. домашняя страница HWUT .

CGreen

А современная, портативная, межъязыковая платформа поблочного тестирования и насмешки для C и C++. Это предлагает дополнительную нотацию BDD, библиотеку насмешки, способность выполнить его в единственном процессе (для создания отладки легче). Исполнитель тестов, которые обнаруживают автоматически тест, функционирует, доступно. Но можно создать собственное программно.

Все те функции (и больше) объяснены в [1 113] руководство .

CGreen, которое Википедия дает подробному списку платформ поблочного тестирования C под [1 114] Список платформ поблочного тестирования: C

467
ответ дан 18 revs, 13 users 45% 8 February 2017 в 00:12
поделиться

В случае, если Вы нацелены на платформы Win32 или привилегированный режим NT, необходимо взглянуть на cfix.

0
ответ дан Johannes Passing 8 February 2017 в 00:12
поделиться

Одна техника для использования должна разработать код модульного теста с C++ xUnit платформа (и компилятор C++) при поддержании источника для целевой системы как C модули.

Удостоверяются, что Вы регулярно компилируете свой источник C в соответствии с Вашим кросс-компилятором, автоматически с Вашими модульными тестами, если это возможно.

1
ответ дан quamrana 8 February 2017 в 00:12
поделиться
4
ответ дан Landon Kuhn 8 February 2017 в 00:12
поделиться

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

2
ответ дан Gerhard 8 February 2017 в 00:12
поделиться

Если Вы знакомы с JUnit тогда, я рекомендую CppUnit. http://cppunit.sourceforge.net/cppunit-wiki

, Который принимает, у Вас есть компилятор C++, чтобы сделать модульные тесты. если не тогда я должен согласиться с Adam Rosenfield, что проверка - то, что Вы хотите.

2
ответ дан Kwondri 8 February 2017 в 00:12
поделиться

Google имеет превосходную среду тестирования. https://github.com/google/googletest/blob/master/googletest/docs/primer.md

И да, насколько я вижу его, будет работать с плоскостью C, т.е. не требует функций C++ (может потребовать компилятора C++, не уверенного).

4
ответ дан 3 revs, 2 users 80% 8 February 2017 в 00:12
поделиться

Во-первых, посмотрите здесь: http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C

Моя компания имеет библиотеку C, которой пользуются наши клиенты. Мы используем CxxTest (библиотека модульного теста C++) для тестирования кода. CppUnit будет также работать. Если бы Вы застреваете в C, я рекомендовал бы RCUNIT (но Кунит хорош также).

3
ответ дан Kevin 8 February 2017 в 00:12
поделиться

Minunit является невероятно простой платформой поблочного тестирования. Я использую его для модульного теста c код микроконтроллера для avr.

129
ответ дан 2 revs, 2 users 89% 8 February 2017 в 00:12
поделиться

Вы также могли бы хотеть смотреть на libtap, среда тестирования C, которая производит Тест что-либо протокол (TAP) и таким образом интегрируется хорошо со множеством инструментов, выступающих в поддержку этой технологии. Это главным образом используется в динамическом мире языка, но это просто в использовании и становящееся очень популярный.

пример:

#include <tap.h>

int main () {
    plan(5);

    ok(3 == 3);
    is("fnord", "eek", "two different strings not that way?");
    ok(3 <= 8732, "%d <= %d", 3, 8732);
    like("fnord", "f(yes|no)r*[a-f]$");
    cmp_ok(3, ">=", 10);

    done_testing();
}
33
ответ дан 2 revs, 2 users 90% 8 February 2017 в 00:12
поделиться

Существует Кунит

И , Встроенная Единица является платформой поблочного тестирования для Встроенной Системы C. Его дизайн был скопирован с JUnit и Кунита и больше, и затем адаптировался несколько к Встроенной Системе C. Встроенная Единица не требует, чтобы станд. C освободил. Все объекты выделяются области константы.

И Tessy автоматизирует поблочное тестирование встроенного программного обеспечения.

12
ответ дан prakash 8 February 2017 в 00:12
поделиться

Я использую CxxTest для встроенного c/c ++ среда (прежде всего, C++).

я предпочитаю CxxTest, потому что он имеет perl/python сценарий для создания исполнителя тестов. После маленького наклона для получения его установка (меньший все еще, так как Вы не должны писать исполнитель тестов) это довольно просто в использовании (включает образцы и полезную документацию). Большая часть работы настраивала 'аппаратные средства' доступы кода, таким образом, я мог тест единицы/модуля эффективно. После этого легко добавить новые случаи модульного теста.

, Как упомянуто ранее это - платформа модульного теста C/C++. Таким образом, Вам будет нужен компилятор C++.

руководство пользователя CxxTest Wiki

CxxTest
6
ответ дан 3 revs, 2 users 82% 8 February 2017 в 00:12
поделиться

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

4
ответ дан 2 revs, 2 users 75% 8 February 2017 в 00:12
поделиться

Я не использую платформу, я просто использую целевую поддержку "проверки" автоинструментов. Реализуйте "основное", и использование утверждают (s).

Мой тестовый dir Makefile.am (s) похожи:

check_PROGRAMS = test_oe_amqp

test_oe_amqp_SOURCES = test_oe_amqp.c
test_oe_amqp_LDADD = -L$(top_builddir)/components/common -loecommon
test_oe_amqp_CFLAGS = -I$(top_srcdir)/components/common -static

TESTS = test_oe_amqp
12
ответ дан navicore 8 February 2017 в 00:12
поделиться

Я в настоящее время использую платформу модульного теста CuTest:

http://cutest.sourceforge.net/

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

  • заголовочный файл, включенный везде, где Вы называете стандартные программы CuTest
  • единственный дополнительный файл 'C', который будет компилироваться/связываться в изображение
  • некоторый простой код, добавленный к к основному, чтобы настроить и назвать модульные тесты - у меня просто есть это в специальном основном () функция, которая компилируется, если UNITTEST определяется во время сборки.

система должна поддерживать "кучу" и некоторую stdio функциональность (который не все встроенные системы имеют). Но код достаточно прост, что Вы могли, вероятно, работать в альтернативах тем требованиям, если Ваша платформа не имеет их.

С некоторым разумным использованием экстерна "C" {} блокируется, оно также поддерживает C++ тестирования очень хорошо.

40
ответ дан Michael Burr 8 February 2017 в 00:12
поделиться

Если Вы находитесь все еще на поиске на среды тестирования, , CUnitWin32 один для платформы Win32/NT.

Это решает одну фундаментальную проблему что я сталкивающийся с другими средами тестирования. А именно, глобальные / статические переменные находятся в детерминированном состоянии, потому что каждый тест выполняется как отдельный процесс.

0
ответ дан Dushara 9 August 2019 в 01:42
поделиться

Michael Feather's book "Working Effectively with Legacy Code" presents a lot of techniques specific to unit testing during C development.

There are techniques related to dependency injection that are specific to C which I haven't seen anywhere else.

11
ответ дан 22 November 2019 в 21:14
поделиться

Лично мне нравится Google Test framework .

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

Это то, что люди имеют в виду, когда говорят о « швах ». В C ваш единственный вариант - использовать препроцессор или компоновщик для имитации ваших зависимостей.

Типичный набор тестов в одном из моих проектов C может выглядеть так:

#include "myimplementationfile.c"
#include <gtest/gtest.h>

// Mock out external dependency on mylogger.o
void Logger_log(...){}

TEST(FactorialTest, Zero) {
    EXPECT_EQ(1, Factorial(0));
}

Обратите внимание, что вы фактически включаете C файл, а не файл заголовка . Это дает преимущество доступа ко всем статическим элементам данных. Также в C ++ вы можете использовать такие приемы, как внедрение зависимостей и переопределение методов, чтобы получить стыки в коде, который в противном случае инкапсулирован.

Майкл Фезерс имеет отличную книгу о тестировании устаревшего кода . В одной главе он описывает методы работы с не объектно-ориентированным кодом, который я настоятельно рекомендую.

Изменить : Я написал сообщение в блоге о процедурном коде модульного тестирования с исходным кодом доступно на GitHub .

Edit : Есть новая книга, выходящая из Pragmatic Programmers , которая конкретно посвящена модульному тестированию кода C, который я настоятельно рекомендую .

У Майкла Фезерса есть отличная книга о тестировании устаревшего кода . В одной главе он описывает методы работы с не объектно-ориентированным кодом, который я настоятельно рекомендую.

Изменить : Я написал сообщение в блоге о процедурном коде модульного тестирования с исходным кодом доступно на GitHub .

Edit : Есть новая книга, выходящая из Pragmatic Programmers , в которой конкретно рассматривается код C модульного тестирования, который я настоятельно рекомендую .

У Майкла Фезерса есть отличная книга о тестировании устаревшего кода . В одной главе он описывает методы работы с не объектно-ориентированным кодом, который я настоятельно рекомендую.

Изменить : Я написал сообщение в блоге о процедурном коде модульного тестирования с исходным кодом доступно на GitHub .

Edit : Есть новая книга, выходящая из Pragmatic Programmers , которая конкретно посвящена модульному тестированию кода C, который я настоятельно рекомендую .

158
ответ дан 22 November 2019 в 21:14
поделиться

LibU ( http://koanlogic.com/libu ) имеет модуль модульного тестирования, который допускает явные зависимости набора тестов / случаев, изоляцию тестов, параллельное выполнение и настраиваемое средство форматирования отчетов (форматы по умолчанию - xml и txt).

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

1
ответ дан 22 November 2019 в 21:14
поделиться

помимо моей очевидной предвзятости

http://code.google.com/p/seatest/

, это хороший простой способ модульного тестирования кода C. имитирует xUnit

6
ответ дан 22 November 2019 в 21:14
поделиться

Я не ушел далеко, тестируя унаследованное приложение C, прежде чем я начал искать способ имитировать функции. Мне очень нужны были макеты, чтобы изолировать файл C, который я хочу протестировать, от других. Я попробовал cmock и думаю, что приму его.

Cmock сканирует файлы заголовков и генерирует фиктивные функции на основе найденных прототипов.Mocks позволит вам протестировать файл C в полной изоляции. Все, что вам нужно сделать, это связать тестовый файл с макетами вместо реальных объектных файлов.

Еще одним преимуществом cmock является то, что он проверяет параметры, передаваемые имитируемым функциям, и позволяет вам указать, какое возвращаемое значение должны предоставлять имитирующие функции. Это очень полезно для тестирования различных потоков выполнения ваших функций.

Тесты состоят из типичных функций testA (), testB (), в которых вы строите ожидания, вызываете функции для тестирования и проверяете утверждения.

Последний шаг - сгенерировать бегун для ваших тестов с единством. Cmock привязан к платформе тестирования единства. Unity так же легко изучить, как и любую другую среду модульного тестирования.

Стоит попробовать и довольно легко понять:

http://sourceforge.net/apps/trac/cmock/wiki

Обновление 1

Другой фреймворк, который я исследую, - это Cmockery.

http://code.google.com/p/cmockery/

Это чистый фреймворк C, поддерживающий модульное тестирование и имитацию. Он не зависит от ruby ​​(в отличие от Cmock) и очень мало зависит от внешних библиотек.

Для настройки моков требуется немного больше ручной работы, потому что при этом не производится генерация кода. Это не требует большого объема работы для существующего проекта, поскольку прототипы не сильно изменятся: как только у вас есть макеты, вам не нужно будет какое-то время их менять (это мой случай). Дополнительный набор текста обеспечивает полный контроль над макетами. Если вам что-то не нравится, вы просто меняете свой макет.

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

Плюс он содержит несколько изящных трюков на языке Си, которых я не знал.

В целом Cmockery нужно немного больше разбираться в mock-объектах, чтобы начать работу. Примеры должны помочь вам преодолеть это. Похоже, он справится с этой задачей с более простой механикой.

21
ответ дан 22 November 2019 в 21:14
поделиться
Другие вопросы по тегам:

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