調べ物した結果

現役SEが仕事と直接関係ないことを調べた結果とか感想とか

ShareXのソースを眺める①~適当リファクタ~

GitHubから適当にソースを拾ってきて、勝手にテスト作ったてみよう。という試み。

・テストの経験値アップ
・他の人のコードみて経験値アップ
・設計が学べる。
が目的。

とりあえずCloneしてみた

⇒ShareX.slnを開くも、フレームワークがちがっててプロジェクトが読み込めない。
フレームワーク4.6.2を使用している模様。ダウンロードが必要なのでダウンロードする。
⇒再度sln開きなおして無事ロード完了。

ともあれビルド

⇒できた。できなかったら次捨てるところだった。

テストを確認

⇒全然ない。書き放題。

ShareX.UploadersLibをくずしていく。

なんとなく、行けそうな空気があるぞ。まずはこのクラスを完全にテストで保護してしまおう。

        public string ToSummaryString()
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("URL: " + URL);
            sb.AppendLine("Thumbnail URL: " + ThumbnailURL);
            sb.AppendLine("Shortened URL: " + ShortenedURL);
            sb.AppendLine("Deletion URL: " + DeletionURL);
            return sb.ToString();
        }

そこまで苦しくなさそう。appendしてくっつけるのがメインの処理か・・・
URLもThumbnailURLもShortenedURL、DelationURLのすべてこのクラスの持ち物。メソッドの場所としては問題ないはず。
「ToSummaryStrgin()」という名称から、何となくこれはデバッグ用のメソッドなんじゃないかとも思う。参照を見てみよう

コード ファイル 行 列 プロジェクト
string UploadResult.ToSummaryString()
'UploadResult.ToSummaryString' の参照は見つかりませんでした D:\git_refact\ShareX\ShareX.UploadersLib\UploadResult.cs ShareX.UploadersLib

ヒュー。たぶん正解。
とりあえずXMLコメントを差し込んでおく
///


/// return combined member variables.
///

/// This Method Usage is Debugging.
///

変更の必要はなさそうだが、ひとまずテストで固めておく。

テストは書けたがビルドが通らない。なぞロックが発生している模様
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー "obj\Debug\ShareX.exe" を "bin\Debug\ShareX.exe" にコピーできませんでした。10 回の再試行回数を超えたため、失敗しました。このファイルは "ShareX (21640)" によってロックされています。
管理者権限ですっとばせるか。やってみる。
⇒だめだった。どうにもおかしいのでタスクマネージャーをみてみたら、ShareX.exeが立ち上がっていた。
 どうやら興味でF5起動してしまったのが残ってしまっていた模様。

        [TestMethod]
        public void UploadResult_ToSummaryString()
        {
            string url = "dummy_url";
            string thumbnail = "dummy_thumbnail";
            string shortend = "dummy_shortened";
            string deletion = "dummy_deletion";

            obj.URL = url;
            obj.ThumbnailURL = thumbnail;
            obj.ShortenedURL = shortend;
            obj.DeletionURL = deletion;


            StringBuilder expectedFormat = new StringBuilder();
            expectedFormat.AppendLine("URL: {0}");
            expectedFormat.AppendLine("Thumbnail URL: {1}");
            expectedFormat.AppendLine("Shortened URL: {2}");
            expectedFormat.AppendLine("Deletion URL: {3}");

            string expected = string.Format(expectedFormat.ToString(), url, thumbnail, shortend, deletion);
            string actual = obj.ToSummaryString();

            Assert.AreEqual(expected, actual);
        }

とりあえずテスト実行。
このテストに果たして意味があるのか。。。なさそう。

が、作ってみておもったがURLが平気で外部から参照できるようになっている。この辺は切り崩すべきだろうか。
1週間さわったら次のリポジトリ触る。