scala - 如何将共享测试与需要清理的固定装置结合起来?
问题描述
目前,我有一组共享的 Scalatest 测试,它们存在于一个特征中,并在必要时混合到测试类中,如下所示:
trait SharedBehavior{
def supportsCoolFeature(){
//Testing happens here
}
def doesNotSupportCoolFeature(){
//Testing happens here
}
}
class MyItemTests extends SharedBehavior{
"A-Type Items" should behave like supportsCoolFeature(itemA)
"B-Type Items" should behave like doesNotSupportCoolFeature(itemB)
}
不幸的是,itemA
并且itemB
是引用数据库中对象的 Scala 类实例。要运行这些测试,我需要创建相应的数据库记录,然后在测试后将其删除。如何有效地使用夹具策略,让我能够通过共享测试执行设置和拆卸?
尽管它并不理想,但我愿意接受一个对整个套件进行一次设置和拆卸的解决方案。我可以编写测试,这样它们就不会相互干扰,但我需要防止数据库随着时间的推移变得混乱。
解决方案
尝试
class MyItemTests extends SharedBehavior with BeforeAndAfterEach with DbSupport {
override def afterEach(): Unit = {
db.deleteAll()
}
def itemA: Item = {
val item = createItemA
db.insert(item)
item
}
def itemB: Item = {
val item = createItemB
db.insert(item)
item
}
"A-Type Items" should behave like supportsCoolFeature(itemA)
"B-Type Items" should behave like doesNotSupportCoolFeature(itemB)
}
trait SharedBehavior {
def supportsCoolFeature(item: => Item) {
// assert on item
}
def doesNotSupportCoolFeature(item: => Item) {
// assert on item
}
}
trait DbSupport {
val db = {
// initialise dataase
}
}
推荐阅读
- c# - 如何对列表对进行分组
在列表中 - >
- c# - 按日期时间过滤 Microsoft.Data.Analysis.DataFrame?
- javascript - 如何在单击按钮时创建收藏夹页面?(HTML/JS/车把)
- xamarin.forms - ReactiveUI Fody [Reactive] 属性在 Xamarin 表单中不起作用
- visual-studio - 如何使用 Cmake 创建:Visual Studio 的 POST BUILD EVENT、调试命令和调试命令参数
- angular - 将 Bearer 令牌添加到标头未按预期工作
- reactjs - 将 react-query 与 TypeScript 一起使用
- php - 当 ORM 中存在子查询时返回布尔值
- service - 我可以在 Wear OS 的后台运行服务,通过 WiFi/LTE 不断发送心率数据吗?
- elasticsearch - Elasticsearch:术语查询不适用于字段长度小于 min_gram 的记录