2013-10-25 102 views
1

的方法我在我的控制器中有一個方法,我想使用Spec2進行單元測試。Play Framework&Scala:嘲笑類

object MyController extends Controller with MyAuth { 
    def article(id: String) = { 
    authenticate { 
     ...... 
    } 
    } 
} 

authenticate定義在MyAuth中。該功能獲取令牌(如果可用)或驗證並獲取令牌。我想嘲笑authenticate單元測試article。我不知道如何繼續這個。任何指針都會有幫助。

更新:我的方法到目前爲止。 我看到了這個question並在MyAuth trait中覆蓋了身份驗證方法。

trait MyAuthMock { 
    this: MyAuth => 

    override def authenticate .... 
} 

我也改變MyController有類和伴侶對象。然後在我的測試中,我使用瞭如下控制器:

new MyController with MyAuthMock 

回答

1

您可以重構一下代碼,使其更容易測試。例如:

class MyController extends Controller { 

    def authenticate(...) // abstract method 

    def article(id: String) = { 
    authenticate { 
     ...... 
    } 
    }  
} 

object MyController extends MyController with RealAuth 

在您的測試類,你會做這樣的事情:

val myTestController = new MyController with FakeAuth 

凡FakeAuth是一個模擬。

+0

我更新了問題與我一起去的方法。我不確定這裏有什麼更好的方法,你的還是我的? – Prasanna