Unit testing 使用ScoutClientTestRunner进行Eclipse Scout客户端单元测试
我试图用scout上下文创建单元测试,但找不到合适的教程或示例 当我使用Unit testing 使用ScoutClientTestRunner进行Eclipse Scout客户端单元测试,unit-testing,junit,client,eclipse-scout,Unit Testing,Junit,Client,Eclipse Scout,我试图用scout上下文创建单元测试,但找不到合适的教程或示例 当我使用ScoutClientTestRunner创建测试时,我得到一个错误 java.lang.Exception: Client session class is not set. Either set the default client session using 'ScoutClientTestRunner.setDefaultClientSessionClass' or annotate your test class
ScoutClientTestRunner
创建测试时,我得到一个错误
java.lang.Exception: Client session class is not set. Either set the default client session using 'ScoutClientTestRunner.setDefaultClientSessionClass' or annotate your test class and/or method with 'ClientTest'
我尝试如下设置客户端会话类:
@Before
public void setClassSession() throws Exception {
ScoutClientTestRunner.setDefaultClientSessionClass(ClientSession.class)
}
及
我试图将@ClientTest
添加到类和所有方法中,但仍然得到相同的错误
如果使用
ScoutClientTestRunner
,如何在测试中设置客户端会话?ScoutClientTestRunner确保执行JUnit测试时,所有Scout上下文(OSGi等)都可用。
您尝试在@课前
或@课前
时太迟了。在此之前,您需要提供Scout上下文初始化参数。正如异常消息所说,您有两种可能性:
(1) @ClientTest注释
您可以使用clientSessionClass
参数使用@ClientTest
注释测试类或方法:
@RunWith(ScoutClientTestRunner.class)
@ClientTest(clientSessionClass = ClientSession.class)
public class DesktopFormTest {
@Test
public void test1() throws Exception {
//Do something requiring a scout context:
//for example instantiate a DesktopForm.
}
}
如有必要,您也可以在方法级别执行此操作:
@RunWith(ScoutClientTestRunner.class)
public class DesktopFormTest {
@Test
@ClientTest(clientSessionClass = Client1Session.class)
public void test1() throws Exception {
//client session is an instance of Client1Session.
}
@Test
@ClientTest(clientSessionClass = Client2Session.class)
public void test2() throws Exception {
//client session is an instance of Client2Session.
}
}
(2) 定义测试环境
运行测试时(直接或使用maven tycho),将完成对完全限定类org.eclipse.scout.testing.client.runner.CustomClientTestenEnvironment
的查找
CustomClientTestenEnvironment
类应该实现org.eclipse.scout.testing.client.runner.iclientTestenEnvironment
方法setupGlobalEnvironment()
只调用一次,可用于使用ScoutClientTestRunner.setDefaultClientSessionClass(…)
定义默认客户端会话。此方法还可用于注册所需的服务
这里有一个例子:
package org.eclipse.scout.testing.client.runner; // <= can not be changed.
// add imports
public class CustomClientTestEnvironment implements IClientTestEnvironment {
@Override
public void setupGlobalEnvironment() {
//Set client session:
ScoutClientTestRunner.setDefaultClientSessionClass(ClientSession.class);
}
@Override
public void setupInstanceEnvironment() {
}
}
package org.eclipse.scout.testing.client.runner;//我不认为我们有很多文档。你可以查看我的演讲和相关演讲()。我会尽量抽出时间在这里写一个详尽的答案。谢谢你的回答:我有一些新问题,我尝试了(2),但我得到了错误:java.lang.reflect.UndeclaredThrowableException位于com.sun.proxy.$Proxy10.getAllCodeTypeClasses(未知源)位于org.eclipse.scout.rt.client.services.common.code.CodeServiceClientProxy.getAllCodeTypeClasses(CodeServiceClientProxy.java:351),位于org.eclipse.scout.rt.client.services.common.code.CodeServiceClientProxy.getAllCodeTypes(CodeServiceClientProxy.java:372),位于org.eclipse.scout.rt.shared.services.common.code.CODES.getAllCodeTypes(CODES.java:97) ..... 正如我所解释的,您需要定义服务器通信的策略(启动或模拟)。我通常注册一个默认的ICodeService
(优先级500),该默认设置在setupGlobalEnvironment
中不起任何作用:TestingUtility.registerServices(Activator.getDefault().getBundle(),500,new TestingCodeService(Collections)。
package org.eclipse.scout.testing.client.runner; // <= can not be changed.
// add imports
public class CustomClientTestEnvironment implements IClientTestEnvironment {
@Override
public void setupGlobalEnvironment() {
//Set client session:
ScoutClientTestRunner.setDefaultClientSessionClass(ClientSession.class);
}
@Override
public void setupInstanceEnvironment() {
}
}