现在我在侦察测试中遇到了新问题。
我有用于测试的客户端片段项目,我想测试一些我创建的模板。
我的问题是这个模板包含一些SmartFields,我想测试它们。为此,我可能需要ScoutServerTestRunner
,因此服务器已启动并运行。
但如果我尝试添加它,我会收到错误:
@RunWith(ScoutServerTestRunner.class)
@ServerTest()
我收到错误:
ServerTest cannot be resolved to a type
,我的所有assert
个导入都会被删除,我的package
行会收到错误,提示我Configure build path
。
我的猜测是,这是无法完成的,因为它是客户端片段,无法连接到服务器。 但是如何测试smartFields呢?
答案 0 :(得分:2)
从你的问题我想有一些误解......
ScoutServerTestRunner
和@ServerTest
类似于ClientServerTestRunner
和@ClientTest
,但对于服务器而言。您将需要它来测试服务器的测试。
这些课程位于org.eclipse.scout.rt.testing.server
捆绑包中。
如果在客户端测试中需要服务器,则有两种可能:
您可以启动服务器
这可能不是普通服务器(生产中的服务器),因为您想要控制数据库或某些外部服务。身份验证也可能略有不同(为了控制它并与测试兼容)
对于maven构建中的集成,maven-cargo插件可用于在执行客户端测试套件之前启动服务器。
每个创建调用服务器的ProxyService的服务调用都可以替换为mock(仅限客户端)。
这是单元测试的首选方法,因为您不依赖于已部署的服务器。您还可以为每个测试定义服务器答案。 这个解决方案可能最初需要更多的工作,但在我看来这是值得的。
要注册替代服务,您可以使用:
TestingUtility.registerServices(
<activator instance>,
<priority>,
<service instances>
);
优先级较高的服务将获胜。
在每项测试中,不要忘记取消注册您已注册的替代服务。
SmartField正在使用CodeTypes或LookupCalls。如果是LookupCall
,LookupCall
可能正在通过LookupService
调用服务器。如果是CodeType
,则SmartField
会在内部使用依赖于CodeLookupCall
的{{1}}类。
在这两种情况下,如果要在没有服务器的情况下运行测试,则需要确保客户端使用需要服务器的所需服务的替代实现。