Scout Eclipse ScoutServerTestRunner 客户端测试

Scout Eclipse ScoutServerTestRunner on client tests

现在我 运行 解决 scout 测试的新问题。

我有用于测试的客户端片段项目,我想测试我创建的一些模板。

我的问题是此模板包含一些 SmartFields,我想测试它们。为此,我可能需要 ScoutServerTestRunner,所以服务器已启动并且 运行ning.

但是如果我尝试添加它,我会收到错误消息:

@RunWith(ScoutServerTestRunner.class)
@ServerTest()

我收到错误:

ServerTest cannot be resolved to a type

,我所有的 assert 导入都被删除,我的 package 行出现错误提示我 Configure build path

我的猜测是这无法完成,因为它是客户端片段并且无法连接到服务器。 但是如何测试 smartFields 呢?

从你的问题来看,我猜是有些误会...


ScoutServerTestRunner@ServerTest 类似于 ClientServerTestRunner@ClientTest 但对于服务器。您将需要它来测试服务器。

classes 位于 org.eclipse.scout.rt.testing.server 包中。


如果在客户端测试中您需要服务器,您有两种可能性:

A/ 启动服务器

您可以启动服务器

这可能不是普通服务器(如生产中的服务器),因为您要控制数据库或某些外部服务。身份验证也可能略有不同(为了控制它并与您的测试兼容)

对于 Maven 构建中的集成,maven-cargo 插件可用于在执行客户端测试套件之前启动服务器。

B/模拟服务器服务

创建调用服务器的 ProxyService 的每个服务调用都可以替换为模拟(仅限客户端)。

这是单元测试的首选方式,因为您不依赖已部署的服务器。您还可以为每个测试定义服​​务器答案。 此解决方案最初可能需要更多工作,但我认为这是值得的。

要注册替代服务,您可以使用:

TestingUtility.registerServices(
     <activator instance>, 
     <priority>, 
     <service instances>
);

优先级高的服务获胜。

在每次测试中,不要忘记un-register您注册的备选服务。


SmartFields 正在使用 CodeType 或 LookupCalls。在 LookupCall 的情况下,LookupCall 可能通过 LookupService 调用服务器。在 CodeType 的情况下,SmartField 在内部使用 CodeLookupCall class 依赖于 ICodeService.

在这两种情况下,如果您想 运行 在没有服务器的情况下进行测试,您需要确保客户端使用需要服务器的所需服务的替代实现。