gpt4 book ai didi

unit-testing - GroovyTestCase 不支持 @BeforeClass 和 @AfterClass

转载 作者:行者123 更新时间:2023-12-04 04:02:21 24 4
gpt4 key购买 nike

我为 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"
}
}
}

当我将类定义更改为
class ShardUnitTests extends GroovyTestCase{

不调用 beforeClassSetUp() 和 afterClassTearDown() 方法。
对于这些方法,我是否应该使用其他一些语法,或者它是否与 GroovyTestCase 不兼容?

最佳答案

我使用 @RunWith使用 JUnit 4 样式运行这些测试的注释以执行类之前/之后的方法。例子:

package org.apache

import org.apache.log4j.Logger
import org.bouncycastle.jce.provider.BouncyCastleProvider
import org.junit.*

import org.junit.runner.RunWith
import org.junit.runners.JUnit4

import java.security.Security

@RunWith(JUnit4.class)
class SomeClassTest extends GroovyTestCase {
private static final Logger logger = Logger.getLogger(SomeClassTest.class)

private SomeClass someClass

@BeforeClass
static void setUpOnce() {
// Do things once for the whole test suite

logger.metaClass.methodMissing = { String name, args ->
logger.info("[${name?.toUpperCase()}] ${(args as List).join(" ")}")
}

Security.addProvider(new BouncyCastleProvider())
}

@Before
void setUp() {
// Do things before every test case
someClass = new SomeClass()
}

@After
void tearDown() {
// Do things after every test case
}

@AfterClass
static void tearDownOnce() {
// Do things once for the whole test suite
}

@Test
void testShouldDoSomething() {
// Arrange

// Act
int result = someClass.doSomething()

// Assert
assert result == 0
}
}

关于unit-testing - GroovyTestCase 不支持 @BeforeClass 和 @AfterClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23157813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com