标题基本上已经说明了一切。我想设置一个传统的JUnit测试来模拟控制器的依赖关系,并对操作运行测试。
我发现我可以这样实现我的目标:
public class AccountsControllerTest {
private controllers.Accounts accountsController;
@Test
public void test() {
running(fakeApplication(), new Runnable() {
public void run() {
accountsController = new controllers.Accounts();
accountsController.setAccountsWorkflow(mock(workflow.Accounts.class));
}
});
}
}
这里的明显问题是,我正在测试方法中实例化我的被测类并注入模拟依赖项,而我应该在
setup()
方法中这样做。如果我要以传统方式测试我的控制器,那么 setup()
方法似乎就没用了。当然,我可以按照 Play 推荐的方式进行控制器测试,但我的应用程序依赖于外部 SOAP web 服务,因此我需要单元测试来显示我们的代码在他们的服务器关闭时工作。
那么,在使用模拟的情况下,如何最好地单元测试 Play 控制器,并仍然利用
setup()
和 teardown()
方法呢?
编辑
我意识到我在这里假设一些知识,所以对于那些不知道的人来说,单元测试中的控制器实例化必须包含在一个 running()
函数中,否则 Play!会抛出运行时异常,提示没有启动应用程序。
running
函数之外实例化控制器的?这个限制阻止了我利用JUnit的setup
方法,以便我不必在每个测试方法中设置模拟对象。你的示例并没有真正展示这一点。 - SamoResult
类型的数据是否可用于 Play 框架。看起来似乎不行。您可以使用我问题中展示的格式来使用 mock 单元测试控制器,但您将无法使用setup()
方法,因此您需要在测试方法之间重复大量模拟。 - Samo