かまたま日記3

プログラミングメイン、たまに日常

PowerPointでTDD

プログラマのみなさんも、会議や勉強会LTなんかでプレゼンってよくやるのではないかと思います。
そんな時にこんな苦い経験はないでしょうか?

  • 言いたいことが多すぎて資料枚数が多くなりすぎて時間オーバー
  • 誤字脱字が多く、発表中に本質から逸れた指摘ばかりされる

こんな時にパワーポイントでもTDDが出来たらなぁと思いませんか?
TDDと言えば、最初にあるべき姿を定義し、それを満たす最低限のプロダクトを作るための設計技法です。
プレゼンの資料作りにもTDDの技術を応用すれば、必要最低限の量で最大限の効果を発揮できる資料ができるのではないでしょうか。*1
そんな皆さんに、今回パワーポイントでTDD(ユニットテスト)ができるツールを用意しました!

使い方

PowerPointで資料を作ります。

資料名をSampleとします。


テストのひな形を自動生成します。

「GenerateTest」マクロを使います。

結果こんなGroovyのテストクラス(SampleTest.groovy)ができあがります。

import org.junit.runner.RunWith
import org.junit.Test

@RunWith(GroovyPPTTestRunner)
class SampleTest {
    PPTPresentation ppt

    @Test
    void testName() {
        assert !'Not yet implemented'
    }
}

PPTPresentationクラスは、PPTファイルのデータを保持するクラスで
GroovyPPTTestRunnerがテストメソッドごとにpptインスタンスにインジェクションしてくれます。

テストを編集します。

例えばこんな感じ

import org.junit.runner.RunWith
import org.junit.Test

@RunWith(GroovyPPTTestRunner)
class SampleTest {
    PPTPresentation ppt

    @Test
    void スライドの枚数確認() {
        assert ppt.slides.size() == 3
    }

    @Test
    void 表紙の内容確認() {
        assert ppt.slides[0].title == 'GroovyでPPTテスト'
        assert ppt.slides[0].shapes[1].text == '@kamatama_41'
    }

    @Test
    void 目次の確認() {
        assert ppt.slides[1].title == '目次'
        // 改行は削除される
        assert ppt.slides[1].shapes[1].text == 'Power PointでVBA?VBAからGroovyを呼び出すスライドショーの内容を書き出す/読み込む'
    }

    @Test
    void 複数テキストボックスの確認() {
        assert ppt.slides[2].title == '複数テキストボックスがある場合'
        assert ppt.slides[2].shapes[1].text == 'テキスト1'
        assert ppt.slides[2].shapes[2].text == 'テキスト2'
        assert ppt.slides[2].shapes[3].text == 'テキスト3'
    }
}

ppt.silidesでSlideクラスのコレクションが取得できます。
Slide#shapesでShepeクラスのコレクションが取得できます。
Shapeクラスはスライドにある各オートシェイプのデータを持っています。*2

テスト実行

「RunTest」マクロを実行します

成功するとこんな感じ

失敗するとこんな感じ

まとめ

やっぱりGroovy最高!

*1:明らかに普通に作ってレビューした方がはy(ry

*2:今はテキストデータしか持っていません