ScoutClientTestRunner 确保在所有 Scout 上下文(OSGi 等)可用的情况下执行 JUnit 测试。你的尝试@Before
或@BeforeClass
为时已晚。您需要在此之前提供 Scout Context 初始化参数。正如异常消息所说,您有两种可能性:
(1)@ClientTest注解
@ClientTest
您可以使用参数注释测试类或方法clientSessionClass
:
@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) 定义一个TestEnvironment
运行测试时(直接或使用 maven-tycho),将完成对完全限定类的查找org.eclipse.scout.testing.client.runner.CustomClientTestEnvironment
。

该类CustomClientTestEnvironment
应该实现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 将覆盖默认值。