type FakeCmd … func (f *FakeCmd) Run() error { … } func (f *FakeCmd) CombinedOutput() ([]byte, error) { … } func (f *FakeCmd) Output() ([]byte, error) { … } func (f *FakeCmd) SetDir(dir string) { … } func (f *FakeCmd) SetStdin(in io.Reader) { … } func (f *FakeCmd) SetStdout(out io.Writer) { … } func (f *FakeCmd) SetStderr(out io.Writer) { … } func (f *FakeCmd) SetEnv(env []string) { … } func (f *FakeCmd) Stop() { … } func (f *FakeCmd) Start() error { … } func (f *FakeCmd) Wait() error { … } func (f *FakeCmd) StdoutPipe() (io.ReadCloser, error) { … } func (f *FakeCmd) StderrPipe() (io.ReadCloser, error) { … } type fakeExitError … func (f *fakeExitError) String() string { … } func (f *fakeExitError) Error() string { … } func (f *fakeExitError) Exited() bool { … } func (f *fakeExitError) ExitStatus() int { … } func TestExec(t *testing.T) { … }