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).
Is there a best way to build an interface for testing?
Are there contexts in which one test interface is better than another?