#blognavi
sbtをいれたのでscala mockを使ってみる。
ファイル構成はこんな感じ。

bild.sbtはここのを参考に作成。

mocktest
├── build.sbt
├── project
│   └── target
│       └── config-classes
├── src
│   ├── main
│   │   └── scala
│   │       ├── Controller.scala
│   │       └── Sample.scala
│   └── test
│       └── scala
│           └── ControllerTest.scala
└── target


まず、Sample.scala
controller内部でよばれる関数A,B。

package com.sample

trait Sample {
	def funcA();
	def funcB();
}


controller本体。AとBを呼び出す。

package com.sample                                              
                                                                
class Controller(sample: Sample)                                
{   
    def callAB() = {                                            
        sample.funcA()                                          
        sample.funcB()
    }
}

最後にControllerTestで、A、Bが呼ばれることをテストする。
package com.sample

import org.scalatest.FunSuite
import org.scalamock.scalatest.MockFactory

class ControllerTest extends FunSuite with MockFactory 
{
    test ("funcAB") {
        val mockSample = mock[Sample]
        val controller = new Controller(mockSample);

        inSequence {
            (mockSample.funcA _).expects()
            (mockSample.funcB _).expects()
        }

        controller.callAB
    }
}

sbtのコンソールからtestと入力と、PASSする。

> test
[info] ControllerTest:
[info] - funcAB
[info] Passed: Total 1, Failed 0, Errors 0, Passed 1
[success] Total time: 0 s, completed 2013/07/26 23:27:12
> 

ちなみに、testBをexpectしないとこうなる。

[info] ControllerTest:
[info] - funcAB *** FAILED ***
[info]   Unexpected call: funcB()
[info] 
[info] Expected:
[info] inAnyOrder {
[info]   inSequence {
[info]     funcA() once (called once)
[info]   }
[info] }
[info] 
[info] Actual:
[info]   funcA()
[info]   funcB() (Option.scala:120)
[error] Failed: Total 1, Failed 1, Errors 0, Passed 0
[error] Failed tests:
[error] 	com.sample.ControllerTest
> [error] (test:test) sbt.TestsFailedException: Tests unsuccessful
[error] Total time: 0 s, completed 2013/07/26 23:29:18
> 

「funcAが1回よばれると思ったら、2回呼ばれてたよ~」、というメッセージが出て、
内部で何が呼ばれていて、呼ばれていないかが分かる。

プロジェクトをまとめたものを、ここにアップしておく。

ふぅ、これでやっとTDDの環境が整った。



カテゴリ: [日記] - &trackback() - 2013年07月26日 23:15:48
名前: コメント:
#blognavi
最終更新:2013年07月26日 23:37