我被迫将JUnit 3用于特定的测试套件.我的理解setUp()和tearDown()服务的功能@Before和@After,但有一个模拟@BeforeClass和@AfterClass对事物的测试开始之前,所有的测试运行后,一旦要发生一次?
android sdk源包含junit.extensions的源代码,但是这些类不在android.jar中,即使junit.framework和junit.runner在那里.我尝试创建自己的junit.extensions包并使用android sdk源中包含的源代码,但是我得到了一个ClassCastException(见下文).android.test.suitebuilder中的东西试图将套接字()方法的返回值强制转换为TestCase,即使套件返回Test接口.
我想使用junit.extensions中的TestSetup类,如下例所示(参见http://etutorials.org/Programming/Java+extreme+programming/Chapter+4.+JUnit/4.7+One-Time+Set+Up +和+撕裂+向下/):
public SomeTestCase extends TestCase {
public static Test suite() {
TestSetup setup = new TestSetup(new TestSuite(SomeTestCase.class)) {
@Override
protected void setUp( ) throws Exception {
// do your one-time setup here!
}
@Override
protected void tearDown( ) throws Exception {
// do your one-time tear down here!
}
};
return setup;
}
public void someTestMethod() { }
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
05-21 08:10:14.152: I/TestRunner(1316): java.lang.RuntimeException: Exception during suite construction
05-21 08:10:14.152: I/TestRunner(1316): at android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests.testSuiteConstructionFailed(TestSuiteBuilder.java:238)
05-21 …Run Code Online (Sandbox Code Playgroud) 我为Shard类创建了一个JUnit4 TestCase,但是当我尝试扩展GroovyTestCase时,它不会运行我的@BeforeClass和@AfterClass方法。
这是我的代码
import groovy.sql.*
import org.junit.*
class ShardUnitTests {
static def shard
static def sql
static def mysqlserver = "REDACTED"
@BeforeClass
static void beforeClassSetUp(){
def db = [url:'jdbc:mysql://${mysqlserver}:3306/test', user:'root', password:'password', driver:'com.mysql.jdbc.Driver']
sql = Sql.newInstance(db.url, db.user, db.password, db.driver)
shard = new Shard(sql: sql)
}
@AfterClass
static void afterClassTearDown(){
sql.execute("DROP TABLE test")
sql.close()
}
@Test
//Test that createObjectTable creates a table with 2 columns
void testCreateObjectTable(){
shard.createObjectTable("test")
sql.rows("SELECT * FROM test"){meta ->
assert meta.getColumnName(1) == "id"
assert meta.getColumnName(2) == "data"
} …Run Code Online (Sandbox Code Playgroud)