使用 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 将覆盖默认值。
我正在尝试使用 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 将覆盖默认值。