Spe*_*ius 5 java junit static playframework
目前,我正在尝试获取静态上下文中从 BaseTest 继承的任何底层类的类名。@BeforeClass因此,为了进行解释,我正在编写一个使用junit 的基类。这里的问题是我在类的所有测试之前启动一个假应用程序,它有自己的内存 h2 数据库。我想将数据库命名为测试类,这样我以后就可以看到每次测试写入数据库的内容。
基础测试:
public abstract class BaseTest {
private static final Map<String, String> testConfig = getTestConfig();
private static FakeApplication fakeApplication;
@BeforeClass
public static void onlyOnce(){
fakeApplication = Helpers.fakeApplication(testConfig);
Helpers.start(fakeApplication);
}
@AfterClass
public static void afterClass(){
Helpers.stop(fakeApplication);
fakeApplication = null;
}
private static Map<String, String> getTestConfig() {
//Here should bee FooTest in this case! But actually it's BaseTest
String className = MethodHandles.lookup().lookupClass().getSimpleName();
...
configs.put("db.default.url", "jdbc:h2:file:./data/tests/" + className + ";AUTO_SERVER=TRUE;MODE=Oracle;DB_CLOSE_ON_EXIT=FALSE");
}
Run Code Online (Sandbox Code Playgroud)
例如一些儿童测试:
public class FooTest extends BaseTest{
@Test
public void testFoo(){
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几件事,但据我所知这是不可能的。但我只是想问一下是否还有什么我不知道的事情。
我找到了使用“@ClassRule”并实现 customg 的解决方案TestWatcher。由于在方法starting(Description description)之前调用,@BeforeClass public static void beforeClass()我可以像这样使用它:
这是我的代码:
public abstract class BaseTest {
@ClassRule
public static CustomTestWatcher classWatcher = new CustomTestWatcher();
private static Map<String, String> testConfig;
private static FakeApplication fakeApplication;
public static class CustomTestWatcher extends TestWatcher {
private String className = BaseTest.class.getSimpleName();
public String getClassName() {
return className;
}
private void setClassName(String className) {
this.className = className;
}
@Override
protected void starting(Description description) {
//This will set className to = FooTest!
setClassName(description.getClassName());
System.out.println("\nStarting test class: " + className);
}
}
@BeforeClass
public static void beforeClass() {
//Here now finally is FooTest!
String className = classWatcher.getClassName();
System.out.println("Creating Test Database and Fake Application for " + className);
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1420 次 |
| 最近记录: |