http://www.perlmonks.org?node_id=370507

McMahon has asked for the wisdom of the Perl Monks concerning the following question:

In this node, dragonchild explains how he's going to build a text-based adventure game in several languages, and wonders how to test his code.

pbeckingham recommends testing at the user interface with Expect.

adrianh recommends writing a common api for each implementation and script the testing through the API.

andyf adds a recommendation to write a state-dumping function.

sgifford recommends controlling the testing with a 2-way pipe in and out of the game.

BrowserUK suggests a simple but multidisciplinary approach with a simple script recorder controlled through Test::More.

That is already a lot of interfaces to test a simple command-line program, and we didn't even hear from the Haskell program-by-contract camp (who talk about testable interfaces a lot) or the FIT alternate-UI camp (who are trying to figure out how to do agile user testing).

So:
Is there a best way to build an interface for testing?
Are there contexts in which one test interface is better than another?