Ryan, thank you very much for refocusing the discussion about testing on the essence and away from the superficial syntactic issues. Syntax, as we all know, is just a macro [which some people may get backwards and conclude that testing is just a macro. Nothing could be further from the truth, however].
Find someone to implement this idea. -- Matthias On Feb 17, 2011, at 8:21 PM, Ryan Culpepper wrote: > On 02/15/2011 07:28 AM, Eli Barzilay wrote: >> And finaly, there's the litmus test for existing code: >> >> * Ryan: is something like this enough to implement the GUI layer? > > Not well, I think. The Test-Result type in Noel's racktest code is too > simple and inflexible. It represents the minimal essence of testing, > but it would be awkward to extend to richer testing sytems. Here's my > counter-proposal for representing the results of tests: > > > TestResult = (test-result header execution status) > where header is a TestHeader, execution is a TestExecution, > and status is a TestStatus > > A TestResult combines a description of the test, a record of its > behavior during execution, and its final status. > > (This fixes the awkward distribution of information in racktest's > Test-Result, with every status variant including a name field---except > for exn:fail, which is anonymous or perhaps stashes it in the > continuation marks.) > > > TestHeader = (test-header name suite info) > where name is (U string #f), suite is (Listof string) > and info is a dictionary. > > A TestHeader identifies the test that has been run via its name and > its enclosing test suite. (Suites can be nested.) It also accommodates > additional information that may be provided by some frameworks but not > others. Examples include the location of the test expression and the > mode of the test (expected to fail, test not yet implemented, etc). > > > TestExecution = dictionary > > TestExecution contains information about the execution of the test > that is unrelated to its success or failure. For example, the rackunit > gui reports the execution time and any custodian-managed resources that > were left around when the test finished. If output is captured during > execution, it would also belong here. > > > TestStatus is one of > - (test-success) > - (test-failure info) > where info is a dictionary > - (test-error raised-value) > > TestStatus represents the status of the test. For the error case, note > that any value can be raised, not just exn structures. > > Common info-dict keys include 'actual and 'expected, and perhaps > 'comparison, but those keys don't apply to all failures. If the > testing framework views failure as something that occurs during > execution of code (as in rackunit, as opposed to check-expect), then > the info-dict would also contain the continuation marks. > > Perhaps there should be another variant for skipped/pending tests, or > perhaps that should be represented by a successful TestStatus and an > annotation on the TestHeader. > > ---- > > And that's not quite the end of it. The rackunit gui creates an entry for a > test case as soon as it starts running, so the user can see what test case is > hanging and interrupt it if they choose. That requires additional > communication between test execution and test display. > > Ryan > _________________________________________________ > For list-related administrative tasks: > http://lists.racket-lang.org/listinfo/dev _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev