0

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

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

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

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

@RunWith(ScoutServerTestRunner.class)
@ServerTest()

我得到错误:

ServerTest cannot be resolved to a type

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

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

4

1 回答 1

2

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


ScoutServerTestRunnerand与服务器@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。如果是 a LookupCallLookupCall则可能是通过 a 调用服务器LookupService。如果是 a CodeType,则SmartField在内部使用CodeLookupCall依赖于 a 的类ICodeService

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

于 2015-03-11T08:58:14.677 回答