将规格与单元一起使用

发布于 2024-10-24 06:48:15 字数 1833 浏览 6 评论 0 原文

我正在尝试让 scala 规范和 unitils-dbunit 正常工作。

要使用unitils,你必须注释你的 使用 @RunWith(classOf[UnitilsJUnit4TestClassRunner]) 测试类或 从类扩展,您可以设置要加载的数据集 @DataSet(数组(“DataSet.xml”))。所有这些都适用于 JUnit。

但是我在使用规范时遇到了两个问题:

  • 我正在使用 gradle 和 ScalaTestAntTask 运行我的规范测试,所以 我猜@RunWith 注释将被忽略。
  • 我无法将 @DataSet 注释设置为我的测试方法 在这里看到:

    <前><代码>[...] @RunWith(classOf[UnitilsJUnit4TestClassRunner]) 类 DaoTest 使用 ScalaTest 扩展规范 { @测试数据源 var 数据源:数据源 = null @DataSet(Array("DataSet.xml")) “查询数据库”应该{ “返回正确的数据” in { [断言某事] } } }

这给了我以下编译器错误:

的预期开始

错误:定义“查询数据库”

应该{ ^

有人知道我如何一起使用规范和单元吗?

更新:这是我想出的解决方案:

    import org.specs.runner.ScalaTest
    import org.specs.Specification
    import org.unitils.dbunit.DbUnitModule
    import java.io.File
    import java.util.Properties
    import org.unitils.core.ConfigurationLoader

    class DaoTest extends Specification with ScalaTest {

        "querying the database" should {

            doBefore {
                UnitilsDatabaseUtils.setup("DataSet.xml", "DataSet2.xml")
            }

            "return the right data" in {
                [test something]
            }
        }
    }

    object UnitilsDatabaseUtils {

        def setup(dataSetFileNames: String*) = {
            val configuration: Properties = new ConfigurationLoader().loadConfiguration
            val dbunitModule = new DbUnitModule
            dbunitModule.init(configuration)

            for (dataSetFileName <- dataSetFileNames) {
                val dataSetURL = getClass.getClassLoader.getResource(dataSetFileName)
                dbunitModule.insertDataSet(new File(dataSetURL.toURI))
            }
        }
    }

-- 基督教

I am trying to get scala specs and unitils-dbunit to work.

To use unitils you have to annotate your
test class with @RunWith(classOf[UnitilsJUnit4TestClassRunner]) or
extend from a class and you can set DataSet's to load with
@DataSet(Array("DataSet.xml")). All of this works with JUnit.

But I got 2 problems when using specs:

  • I am running my specs tests with gradle and the ScalaTestAntTask, so
    I guess the @RunWith annotation will be ignored.
  • I can not set the @DataSet annotation to my test method as
    seen here:

    [...]
    @RunWith(classOf[UnitilsJUnit4TestClassRunner])
    class DaoTest extends Specification with ScalaTest {
    
        @TestDataSource
        var dataSource: DataSource = null
    
        @DataSet(Array("DataSet.xml"))
        "querying the database" should {
            "return the right data" in {
                [assertSomething]
            }
        }
    }
    

This gives me the following compiler error:

error: expected start of definition

"querying the database" should {

^

Does somebody know how I can use specs and unitils together?

UPDATE: This is the solution I came up with:

    import org.specs.runner.ScalaTest
    import org.specs.Specification
    import org.unitils.dbunit.DbUnitModule
    import java.io.File
    import java.util.Properties
    import org.unitils.core.ConfigurationLoader

    class DaoTest extends Specification with ScalaTest {

        "querying the database" should {

            doBefore {
                UnitilsDatabaseUtils.setup("DataSet.xml", "DataSet2.xml")
            }

            "return the right data" in {
                [test something]
            }
        }
    }

    object UnitilsDatabaseUtils {

        def setup(dataSetFileNames: String*) = {
            val configuration: Properties = new ConfigurationLoader().loadConfiguration
            val dbunitModule = new DbUnitModule
            dbunitModule.init(configuration)

            for (dataSetFileName <- dataSetFileNames) {
                val dataSetURL = getClass.getClassLoader.getResource(dataSetFileName)
                dbunitModule.insertDataSet(new File(dataSetURL.toURI))
            }
        }
    }

--
Christian

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

还不是爱你 2024-10-31 06:48:15

DataSet 注解不能直接应用于 "xxx" should 因为这不是测试方法,只是常规的 scala 代码调用。

我不能给你一个完整的工作解决方案,但你需要做的是挖掘unitils API并使用DataSetFactory 直接加载您的数据。我认为您或多或少可以重用找到的代码 此处

然后,如果您需要在每个示例之前加载此数据集,只需使用 doBefore 调用。

The DataSet annotation can't be applied directly to "xxx" should because this is not a test method, just a regular scala code call.

I can't give you a fully working solution but what you need to do is to dig out the unitils API and use the DataSetFactory directly to load your data. I think that you can more or less reuse the code found here.

Then, if you need to load this dataset before each example, just use a doBefore call.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文