1

我的控制器中有一个方法,我想使用 Spec2 进行单元测试。

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

authenticate中定义MyAuth。此函数获取令牌(如果可用)或进行身份验证并获取令牌。我想authenticate在单元测试时进行模拟article。我不确定如何进行此操作。任何指针都会有所帮助。

更新:到目前为止我的方法。 我看到了这个问题并覆盖了 MyAuth 特征中的身份验证方法。

trait MyAuthMock {
  this: MyAuth =>

  override def authenticate ....
}

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

new MyController with MyAuthMock
4

1 回答 1

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 是一个模拟。

于 2013-10-25T21:49:55.147 回答