Scroll to navigation

doc_decisions_unit_testing_md(3elektra) Elektra doc_decisions_unit_testing_md(3elektra)

NAME

doc_decisions_unit_testing_md - C++ Unit Testing Framework

Issue

The previous unit testing framework started as hack to have a bit more than simple asserts. It is not easy to use (needs explicit enumeration of all testcases) and lacks of really important features (e.g. output of the assertion that failed).

Constraints

  • Must be BSD licenced
  • Must be easy to use
  • should be portable
  • container testing?
  • mocking?

Assumptions

Considered Alternatives

  • Continue with current framework
  • Boost Unit Testing framework

Decision

Google Unit testing framework with code embedded in Elektra for systems where no source is installed (Debian Wheezy, Arch Linux, Fedora,...)

Argument

  • Having the output of current values when an assertion fails in any case
  • No listing of all test cases in main (but instead having test discovery)
  • No more commenting out if you only want to run parts of the test-suite
  • No more typos in test-suite namings
  • xUnit output for jenkins
  • value and type-parameterized tests
  • Mock-Support (not available in gtest?)
  • setup/teardown global+per test
  • supports death tests
  • writing many parts of it on our own adds to the total amount of code to write and maintain.
  • integrations into IDEs

Implications

  • It adds lots of code in the repository
  • It is not ideal to have different frameworks intermixed (C vs. C++ frameworks, but most code is C)
  • In the end we have to write a lot of functionality ourselves anyway (e.g. comparing Keys and KeySets)
  • Testsuite execution are already handled by cmake and kdb run-all.
  • The selection of tests within a test suite does not play well with ctest.
  • Rewriting all current tests to have unified behaviour is a lot of work
  • Wont work for ABI compatibility tests
  • Mock only by extra framework
Script Testing

Notes

  • We had discussions on Mailinglists
  • We had discussions on github
Sun May 29 2016 Version 0.8.14