Play Framework& Scala:从课堂上嘲笑一个方法

时间:2013-10-25 20:07:19

标签: unit-testing scala playframework mocking

我在Controller中有一个方法,我希望使用Spec2进行单元测试。

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

authenticateMyAuth中定义。此函数获取令牌(如果可用)或验证并获取令牌。我想在单元测试authenticate时模拟article。我不知道如何处理这个问题。任何指针都会有所帮助。

更新:我的方法到目前为止。 我在MyAuth特征中看到了这个question并覆盖了authenticate方法。

trait MyAuthMock {
  this: MyAuth =>

  override def authenticate ....
}

我还将MyController更改为具有类和伴随对象。然后在我的测试中,我使用控制器如下

new MyController with MyAuthMock

1 个答案:

答案 0 :(得分: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是模拟者。