Philip Kendall's response to the above post refers to an extremely important(!) element of this picture – which really should have been presented as an "answer." Namely: "because I haven't written the code yet."
In lots of practical software-engineering situations, "the source-code is perfunctory, as long as it fulfills the requirements." The key realization being that: "what are(!) the requirements" is the actual issue at hand. Therefore, you can very-definitely "test" a piece of software that no one has yet written, because any time spent writing source-code against incorrect or incomplete requirements is "by definition, wasted." (And, "dreadfully expensive.")