使用 ScoutClientTestRunner 的 Eclipse Scout 客户端单元测试

Eclipse Scout client unit tests with ScoutClientTestRunner

我正在尝试使用 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'

我尝试这样设置客户端 session class :

@Before
public void setClassSession() throws Exception {

  ScoutClientTestRunner.setDefaultClientSessionClass(ClientSession.class)         
}

@BeforeClass
public void setClassSession() throws Exception {

  ScoutClientTestRunner.setDefaultClientSessionClass(ClientSession.class);
}

我尝试将 @ClientTest 添加到 class 和所有方法,但我仍然遇到同样的错误。

如果使用 ScoutClientTestRunner,如何在测试中设置客户端 session?

ScoutClientTestRunner 确保 JUnit 测试在所有 Scout 上下文(OSGi 等)可用的情况下执行。 您对 @Before@BeforeClass 的尝试为时已晚。您需要在此之前提供 Scout Context 初始化参数。正如异常消息所说,您有 2 种可能性:

(1) @ClientTest 注解

您可以使用 clientSessionClass 参数使用 @ClientTest 注释测试 classes 或方法:

@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)时,完成对完全合格的 class org.eclipse.scout.testing.client.runner.CustomClientTestEnvironment 的查找。

CustomClientTestEnvironment class 应该执行 org.eclipse.scout.testing.client.runner.IClientTestEnvironment

方法 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() {
  }
}

当然(1)和(2)是兼容的。第二种机制仅定义默认值,配置有 (1) 的 ClientSession 将覆盖默认值。