【问题标题】:Scout Eclipse ScoutServerTestRunner on client tests客户端测试上的 Scout Eclipse ScoutServerTestRunner
【发布时间】:2015-03-10 07:25:31
【问题描述】:

现在我遇到了侦察测试的新问题。

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

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

但如果我尝试添加它,我会得到错误:

@RunWith(ScoutServerTestRunner.class)
@ServerTest()

我得到错误:

ServerTest cannot be resolved to a type

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

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

【问题讨论】:

  • 如果我只使用 ScoutClientTestRunner 运行,我会得到:serverURL 为空。检查 proxyHandler 扩展。示例值为:localhost:8080/myapp/process

标签: junit client-server server eclipse-scout


【解决方案1】:

从你的问题来看,我猜有一些误解......


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

这些类位于org.eclipse.scout.rt.testing.server 包中。


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

A/ 启动服务器

你可以启动一个服务器

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

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

B/ 模拟服务器服务

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

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

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

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

优先级较高的服务将获胜。

在每次测试中,不要忘记取消注册您已注册的替代服务。


SmartFields 正在使用 CodeTypes 或 LookupCalls。对于LookupCallLookupCall 可能正在通过LookupService 调用服务器。对于CodeTypeSmartField 在内部使用依赖于ICodeServiceCodeLookupCall 类。

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

【讨论】:

  • 感谢您的回答。对于选项(1),我认为如果我只是“正常”启动侦察服务器(scout-server.dev.product -> 运行)是不够的。您能否提供一些详细信息如何做到这一点?
  • 那么你还需要配置你的服务器在哪里。我猜你的ClientSession 有一条线可以做到这一点:setServiceTunnel(new ClientHttpServiceTunnel(this, UriUtility.toUrl(getBundle().getBundleContext().getProperty("server.url")))); in execLoadSession()。这意味着读取了server.url 属性。我们通常在config.ini 文件中定义它。当您运行测试时,您可以表明您想要使用特定的config.ini 文件。检查“运行配置”的“配置”选项卡。另一种方法是创建一个 TestingClientSession,其中 url 是硬编码的。
  • 谢谢,这有很大帮助
  • 我有这个问题:正如你所说,我在运行配置中将 config.ini 设置为:scout.ui.rap/products/development/config.ini 并且我收到错误:错误:重复别名。无法为 [alias="/",contributor="com.sixt.leasing.core.scout.server[22]"] 注册 servlet,并且未运行测试。如果我将 config.ini 设置为 scout.ui.rap/products/production/config.ini 我得到 ProcessingException[ProcessingStatus[ERROR code=0 Calling ... Caused by: org.eclipse.scout.rt.shared.servicetunnel.HttpException : 404 - NOT_FOUND 用于所有服务,但执行除那些需要服务的所有测试。
  • 您需要检查哪个 servlet 是重复别名。没有看到你的代码,我忍不住……当你设置为第二个config.ini时,这个文件中server.url的值是多少?你确定你的服务器可以通过这个 url 访问吗?也许您需要一个特殊的config.ini 来进行测试。正如我在回答中所写,我并不是集成测试(使用服务器测试)的粉丝,我更喜欢使用模拟服务器服务进行单元测试。
猜你喜欢
  • 2015-12-29
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 2019-01-21
相关资源
最近更新 更多