ANN: ADEPT (A Declarative, Eval()-based Program Tester)
ADEPT--"A Declarative, Eval-based Program Tester"--is an open source unit testing tool that allows users to define test cases as tuples-- e.g., # reworking of unittest example from Python unittest doc, # minus initializers and finalizers getTest =\ ( "check default size", eqValue((50,50)), Widget("The Widget").size ) testWidget = Widget("The widget") setTest =\ ( "check resize", eqValue((100,150)), "testWidget.size()", testWidget.resize, (100,150) ) testSuite =\ (("get actions", (getTest,)), ("set actions", (setTest,))) --and then execute, label, log, and check the tests' results: # widgetLogger labels tests, and stores labels and test results # >>> suite =\ [("get actions",(getTest,)), ("set actions",(setTest,))] >>> widgetLogger = TestLogger() >>> doTestSuite(suite, widgetLogger) # # assumption here: all tests succeeded, hence, no advisories # >>> widgetLogger.failureCount() 0 >>> widgetLogger.successCount() 2 >>> widgetLogger.failures() () # # cases could be stored to a list and sorted, if required # >>> widgetLogger.successes() ((2, 1), (1, 1)) >>> map(widgetLogger.getBanner, widgetLogger.successes) ('2.1. set actions: check Widget.resize(100,150)', '1.1. get actions: check Widget default size') The getTest and setTest tuples shown here typify what ADEPT calls "get actions" and "set actions" tests: checks for a callable object's returned results and effects, respectively. *. The getTest tuple, when evaluated as a "get actions" test, directs ADEPT to evaluate eqValue((50,50))(Widget("The widget").size()), and record success iff this expression evaluates to 1 (true). *. The setTest tuple, when evaluated as a "set actions" test, directs ADEPT to execute testWidget.resize(100,150), then record success iff the expression eqValue((100,150))(testWidget.size()) evaluates to 1. I wrote ADEPT as a tool for creating succinct, self-documenting test cases for a large utility that I've been working on since March--3,000+ test cases, with about 3/4 of the way to go. I'm releasing ADEPT because I've appreciated having it, and would like to get people's impressions of ADEPT--along with suggestions for improvement. ADEPT is at http://csciwww.etsu.edu/phil/samples/adept.zip. This first release includes the following: -. a 5 pp. HTML overview of ADEPT's functionality, features, and limitations (http://csciwww.etsu.edu/phil/samples/adept.htm). -. adept.py, ADEPT's source code: about 950 lines of Python, with about 1,000 lines of banners, comments and whitespace (http://csciwww.etsu.edu/phil/samples/adept.py). -. adept.txt, the ADEPT user manual: about 40 pp. of text (60 lines x 80 columns), organized as -. an introduction, plus sections that describe -. ADEPT's nine types of tests: get actions, set actions, get+set actions, null actions, error actions, get prop actions, set prop actions, get prop error actions, set prop error actions --with comments on strategies for using each kind of test, and a special section on repr string testing. -. ADEPT test indexing. -. additional ADEPT features, including nested test suite execution and the use of AND/OR-tree-like objects to apply multiple predicates to a single test. -. ADEPT's design--including notes on how to add test types, and comments on the tool's limitations. (http://csciwww.etsu.edu/phil/samples/adept.txt). -. adeptExamples.py, a program that illustrates the operation of the examples in the ADEPT manual. (http://csciwww.etsu.edu/phil/samples/adeptExamples.py). -. adeptTestSuite.py, a 782-test-case-long validation suite for ADEPT, written in ADEPT. (http://csciwww.etsu.edu/phil/samples/adeptTestSuite.py). =================== Phil Pfeiffer/East TN State U. |Kindness in thought leads to wisdom. Dept. of CIS /P.O. Box 70711 |Kindness in speech leads to eloquence. Johnson City, TN. 37614-1266 |Kindness in action leads to love phil@etsu.edu (423) 439-5355 | -- Lao-Tsu
participants (1)
-
phil@etsu.edu