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
.
在这两种情况下,如果您想 运行 在没有服务器的情况下进行测试,您需要确保客户端使用需要服务器的所需服务的替代实现。
现在我 运行 解决 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
.
在这两种情况下,如果您想 运行 在没有服务器的情况下进行测试,您需要确保客户端使用需要服务器的所需服务的替代实现。