Unit testing 使用ScoutClientTestRunner进行Eclipse 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

我试图用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 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() {
  }
}