Проверить равенство API, который присутствует на разных языках - PullRequest
1 голос
/ 13 марта 2012

как бы вы решили следующую проблему?

У меня есть API, который проверяет токены (которые являются простыми файлами XML).Таким образом, API определяет множество методов проверки, таких как validateTime(String tokenPath), validateFileHash(String tokenPath) или validateSomthingElse(String tokenPath).

API уже реализован на двух разных языках.Java и C. Моя задача - убедиться, что обе версии ведут себя одинаково .Поэтому, если Java выдает TokenExpiredException после вызова validateTime("expiredToken.xml"), C должен вернуть соответствующее значение ошибки (в этом случае предопределенное значение -4 для TOKEN_EXPIRED).

Старый добрый подход заключается в написании модульных / интеграционных тестов на обоих языках.Однако это потребовало бы вдвое больше усилий, поскольку мне пришлось бы реализовать по существу одинаковые тесты в Java и в C.

Моя идея состояла в том, чтобы определить XML-схему для TestCases, которая бы выглядела примерно так:

<!-- TestCases.xml -->
<testcase>
  <tokenpath>expiredToken.xml</tokenpath>
  <apiMethod>validateTime</apiMethod>
  <expectationJava>TokenExpiredException</expectationJava>
  <expectationC>-4</expectationC>
</testcase>

<testcase>
  ...
</testcase>

Более того, я бы создал небольшой Java-инструмент для анализа TestCases.xml и прямого вызова обеих версий API (используя JNI для C), чтобы сопоставить результат с предустановленными ожиданиями.

Как вы думаете,это выполнимый план, или лучше использовать старый подход?Есть ли фреймворки для решения подобных задач или это вонючая идея для начала?

Заранее спасибо

PS Извините за мой английский:)

1 Ответ

0 голосов
/ 16 марта 2012

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

Вот пример того, как проводить тесты Java с помощью JUnit + электронная таблица Excel, содержащая данные: http://www.wakaleo.com/component/content/article/241

Я не сразу увидел его, но, надеюсь, вы найдете что-то похожее для C.

...