Pour un projet (que je présenterais plus tard sur le forum), j’ai eu besoin d’avoir du retour sur mes tests. Une des métriques m’intéresse est le pourcentage de couverture, car il me permet de connaître les branches que je n’ai pas encore testé et d’ajouter des scénarios.
En cherchant un peu sur Internet, je suis tombé sur 2 outils :
En voici un petit comparatif.
Comparatif
Facilité d’installation
kcov
1 2 3 4 5 6 7 8 9 10 | wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz && tar xzf master.tar.gz && cd kcov-master && mkdir build && cd build && cmake .. && make && make install DESTDIR=../../kcov-build && cd ../.. && rm -rf kcov-master |
Tarpaulin
1 2 | # install libssl-dev pkg-config cmake zlib1g-dev
cargo install cargo-tarpaulin
|
Tarpaulin 1 ; kcov 0
Utilisation simple et explicite
kcov
1 | kcov --exclude-pattern=/.cargo,/usr/lib --verify target/cov target/debug/<PROJECT-NAME>-<hash>
|
Tarpaulin
1 | cargo tarpaulin |
Tarpaulin 2 ; kcov 1
Les 2 restent simples d’utilisation. Tarpaulin ayant moins d’options pour le moment.
Fonctionne
kcov
Pour mon projet… les rapports donnaient des %NAN…
Tarpaulin
Fonctionne directement, les rapports sont corrects.
Tarpaulin 3 ; kcov 1
Support rapide
kcov
Une issue posté, réponse rapide, mais pas de solution trouvée
Tarpaulin
Une issue posté, la personne est rapide a répondre et a cherché en profondeur (l’issue venait de rustc
et est fixée en nightly)
Tarpaulin 4 ; kcov 1
Compatibilité avec coveralls.io
Les deux sont compatibles et peuvent envoyer des rapports facilement à coveralls.io
Tarpaulin 5 ; kcov 2
Produit des rapports HTML (pour avant de soumettre mon code)
kcov le permet, tarpaulin dans une version future
Tarpaulin 5 ; kcov 3
Permet d’exclure des fichiers du rapport
Tarpaulin 5 ; kcov 4
Au final même si kcov
possède plus de fonctionnalités, tarpaulin
l’emporte (et le fait que seul lui fonctionne dans mon cas est ce qui m’intéresse le plus je l’avoue).
Au final, si tarpaulin
est intéressant pour votre projet, voici le .travis.yml
du projet :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | language: rust rust: - stable - nightly sudo: true git: submodules: false before_install: - sed -i 's/git@github.com:/https:\/\/github.com\//' .gitmodules - git submodule update --init --recursive install: - sudo apt-get install -y libdbus-1-dev openssl - | # tarpaulin deps if [[ "$TRAVIS_RUST_VERSION" == nightly ]]; then sudo apt-get update -y && sudo apt-get -y install libssl-dev pkg-config cmake zlib1g-dev; cargo install cargo-tarpaulin; fi - rustc -V before_script: - "export DISPLAY=:99.0" - "sh -e /etc/init.d/xvfb start" - sleep 3 # give xvfb some time to start script: - cargo build - RUST_TEST_THREADS=1 cargo test -- --nocapture - | # tarpaulin deps if [[ "$TRAVIS_RUST_VERSION" == nightly ]]; then cargo tarpaulin --ciserver travis-ci --coveralls $TRAVIS_JOB_ID; fi |