Junit 客户机测试上的Scout Eclipse ScoutServerTestRunner

Junit 客户机测试上的Scout Eclipse ScoutServerTestRunner,junit,client-server,server,eclipse-scout,Junit,Client Server,Server,Eclipse Scout,现在我遇到了侦察测试的新问题 我有一个客户端片段项目进行测试,我想测试我创建的一些模板 我的问题是这个模板包含一些SmartFields,我想测试它们。为此,我可能需要ScoutServerTestRunner,这样服务器就可以启动并运行了 但如果我尝试添加它,则会出现错误: @RunWith(ScoutServerTestRunner.class) @ServerTest() 我得到一个错误: ServerTest cannot be resolved to a type ,所有我的ass

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

我有一个客户端片段项目进行测试,我想测试我创建的一些模板

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

但如果我尝试添加它,则会出现错误:

@RunWith(ScoutServerTestRunner.class)
@ServerTest()
我得到一个错误:

ServerTest cannot be resolved to a type
,所有我的
assert
导入都将被删除,并且我的
行上出现错误,建议我
配置生成路径

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

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


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

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


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

A/启动服务器 您可以启动服务器

这可能不是正常的服务器(与生产中的服务器类似),因为您希望控制数据库或某些外部服务。身份验证也可能略有不同(为了控制身份验证并使其与测试兼容)

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

B/模拟服务器服务 创建调用服务器的代理服务的每个服务调用都可以替换为mock(仅限客户端)

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

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

TestingUtility.registerServices(
     <activator instance>, 
     <priority>, 
     <service instances>
);
TestingUtility.registerServices(
, 
, 
);
优先级较高的服务将获胜

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


SmartFields正在使用代码类型或查找调用。在
LookupCall
的情况下,
LookupCall
可能是通过
LookupService
调用服务器。如果是
代码类型
智能字段
在内部使用
CodeLookupCall
类,该类依赖于
ICodeService


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

如果仅使用ScoutClientTestRunner运行,则我得到的结果是:serverURL为null。检查proxyHandler扩展。示例值是:谢谢您的回答。对于选项(1),我假设如果我只是“正常”启动scout服务器(scout-server.dev.product->run),这还不够。你可以提供一些细节如何做吗?你还需要配置你的服务器在哪里。我猜您的
ClientSession
有一行代码可以完成它:
setServiceTunnel(新的ClientHttpServiceTunnel(这个,UriUtility.toUrl(getBundle().getBundleContext().getProperty(“server.url”))
execLoadSession()
中。这意味着将读取
server.url
属性。我们通常在
config.ini
文件中定义它。运行测试时,可以指示要使用特定的
config.ini
文件。检查“运行配置”的“配置”选项卡。另一种方法是创建一个TestingClientSession,其中url是硬编码的。谢谢,这有助于解决lotI遇到的问题:正如您所说,我将run config中的config.ini设置为:scout.ui.rap/products/development/config.ini,然后得到错误:error:replicate alias。未能为[alias=“/”,contributor=“com.sixt.leasing.core.scout.server[22]”注册servlet,并且正在运行非测试。如果我将config.ini设置为scout.ui.rap/products/production/config.ini,我会得到ProcessingException[ProcessingStatus][错误代码=0调用…由以下原因引起:org.eclipse.scout.rt.shared.servicetunnel.HttpException:404-未找到所有服务,但执行了除需要服务的测试之外的所有测试。您需要检查哪个servlet是重复的别名。在没有看到您的代码的情况下,我无法帮助…当您将其设置为第二个
config.ini
,是什么这个文件中
server.url
的值?你确定你的服务器可以通过这个url访问吗?也许你需要一个特殊的
config.ini
来进行测试。正如我在回答中所写的,我并不真正喜欢集成测试(使用服务器测试),我更喜欢使用模拟服务器服务的单元测试。