Version 2 (modified by pixilla (Bradley Giesbrecht), 11 years ago) (diff) |
---|
TODO:
- run all tests method
- makefile test target
- additional files (Portfile, sources.conf)
- regression tests
Intro
The MacPorts testing framework uses tcltest [0] for its unit tests as well as regression tests. Maintainer: marius@…
Must know
- each module of MacPorts (port1.0, macports1.0, package1.0) has its own ‘tests/’ directory where the test files are located and also additional files needed (Portfile, test.tcl)
- each file in a module has a corresponding test file (.test extension) in the ‘tests/’ directory
- each proc in a file has a corresponding test case (test proc_name) in the
- each test case must be independent from each other, so they can be run individually if needed
- each test must clan all auxiliary files or directories it creates and revert all port it installs
Sample file
# include required tcltest package and set namespace package require tcltest 2 namespace import tcltest::* # get absolute path to current ‘tests/’ directory set pwd [file normalize $argv0] set pwd [eval file join {*}[lrange [file split $pwd] 0 end-1]] # debug options # ports_debug and ports_verbose are commented out as default # need to be set before ‘mportinit’ array set ui_options {} #set ui_options(ports_debug) yes #set ui_options(ports_verbose) yes mportinit ui_options # source/require tested/needed files source ../../port1.0/portutil.tcl # additional procs needed for testing proc registry_exists {name version {revision 0} {variants ""}} { global macports::registry.format return [${macports::registry.format}::entry_exists $name $version $revision $variants] } # test case example # the test name must reflect the tested proc (remove namespaces if any) # the test description should list specific values from the tested proc on which it depends # or the partial cases it tests test mportclose { Mport close unit test. # the setup branch is optional } -setup { set mport [mportopen file://.] # please make output as useful as possible (even error cases) # all sub-test cases should be part of the body branch } -body { if {[catch {mportclose $mport}] != 0} { return "FAIL: cannot run mportclose" } return "Mport close successful." # the cleanup branch is optional } -cleanup { file delete -force $pwd/work } -result "Mport close successful." # print test results cleanupTests
Resources
[0] - Tcltest official wiki page
[1] - Getting started with tcltest
[2] - Official tcltest documentation