diff --git a/cmd/mstdn/cmd_upload_test.go b/cmd/mstdn/cmd_upload_test.go
new file mode 100644
index 0000000..6f6b99a
--- /dev/null
+++ b/cmd/mstdn/cmd_upload_test.go
@@ -0,0 +1,30 @@
+package main
+
+import (
+	"fmt"
+	"net/http"
+	"strings"
+	"testing"
+
+	"github.com/urfave/cli"
+)
+
+func TestCmdUpload(t *testing.T) {
+	out := testWithServer(
+		func(w http.ResponseWriter, r *http.Request) {
+			switch r.URL.Path {
+			case "/api/v1/media":
+				fmt.Fprintln(w, `{"ID": 123}`)
+				return
+			}
+			http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
+			return
+		},
+		func(app *cli.App) {
+			app.Run([]string{"mstdn", "upload", "../../testdata/logo.png"})
+		},
+	)
+	if !strings.Contains(out, "123") {
+		t.Fatalf("%q should be contained in output of command: %v", "123", out)
+	}
+}