`
softbear
  • 浏览: 39414 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

play framework慎用Fixture.deleteAll()

    博客分类:
  • play
阅读更多

最近尝试使用play framework来开发网站,它的开发模式实在好用:修改类后自动加载而无需重启、可配置自动重建表和插入测试数据等,但是看起来美好的东西也有陷阱。

 

为了每次修改类和启动程序的时候,只使用预定测试的数据,所以我写了一个类,当程序启动的时候会清除表数据并导入写在yml文件里的数据。

 

@OnApplicationStart
public class Bootstrap extends Job {

	@Override
	public void doJob() {
		Fixtures.deleteAll();
		Fixtures.load("data.yml");
	}
	
}

 由于我们项目使用的数据库是sybase,所以我干脆配置数据库为sybase测试程序,并且数据库里已经有一些不是此程序用的表。结果程序启动后整个数据库的表数据被清空!

原因就是Fixtures.deleteAll()会遍历数据库的所有表,并把每个表都truncate或者delete了。

 

Fixtures.deleteAllModels()这个方法可以只删除定义的Model的数据,而不会删除其他表。这个方法也是有缺点的,就是你继承JPABase的类对应的表都会去清空,例如因为Model里默认有个Long类型的id字段

 

@MappedSuperclass
public class Model extends GenericModel {

    @Id
    @GeneratedValue
    public Long id;

    public Long getId() {
        return id;
    }
}

 但是我想改用UUID作ID,所以继承了GenericModel(GenericModel是继承JPABase的)写了个类让实际用的模型类继承

 

@MappedSuperclass
public class ModelWithUuid extends GenericModel {

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO, generator = "system-uuid")   
	@GenericGenerator(name = "system-uuid", strategy = "uuid.hex")
	@Column(columnDefinition="char(32)")
	public String id;

	public String getId() {
		return id;
	}
	
}

 程序运行的时候就会出现这个错误

 

play.exceptions.UnexpectedException: Model ModelWithUuid is not managed by any plugin

 如果每个继承Model的类都会用到,可以直接用Fixtures.deleteAllModels()删除表数据,不然用Fixtures.delete(User.class)这样的方法写上要自动删除表数据的类了。

@OnApplicationStart
public class Bootstrap extends Job {

	@Override
	public void doJob() {
		Fixtures.delete(User.class);
		Fixtures.delete(Admin.class);
		Fixtures.delete(Menu.class);
		Fixtures.load("data.yml");
	}
	
}
 

慎用Fixtures.deleteAll()!

分享到:
评论

相关推荐

    New-Fixture.Tests.ps1

    New-Fixture.Tests.ps1

    New-Fixture.ps1

    New-Fixture.ps1

    AFR for asymmetric fixture.pdf

    自动夹具移除(AFR)技术用于去除印刷电路板(PCB)或封装上不希望的夹具效应,以获取I/O缓冲器处的纯净抖动水平。随着数据速率的提高和允许的抖动水平的降低,准确地表征和去除这些夹具变得越来越重要。...

    SAE AS6944 -2023 Dynamic Seal Test Fixture.pdf

    SAE AS6944 -2023 Dynamic Seal Test Fixture.pdf

    QuickBuild_FIxture.vpp

    同Calibration一样,fixture同样创建一个新的坐标系,不同之处在于经过Calibration之后生成的是一个**固定坐标系**,而Fixture之后是一个“**随动**”的坐标系。此外,经过Calibration之后的坐标空间一般为物理坐标...

    前端开源库-karma-fixture

    5. **简洁的API**:插件提供了简单的API,例如`fixture.url()`和`fixture.set()`,使得在测试用例中设置和加载fixture变得直观易用。 6. **可配置性**:`karma-fixture`允许通过配置文件调整其行为,比如设定...

    5smart creat dynamic fixture.rsstn

    工业机器人 robotstudio 从入门到精通

    kotlin-fixture,用于kotlin的autofixture:fixture是一个开源库,旨在使创建包含测试数据的对象图更加容易。.zip

    例如,你可以使用`fixture.create()`方法来生成一个特定类型的实例,或者使用`fixture.fill()`方法来填充已有的对象。对于特定需求,还可以通过注册自定义的生成规则,实现对特定类型数据的定制化生成。 Kotlin-...

    pytest框架之fixture详细使用.docx

    pytest.main('-q test_fixture.py') ``` pytest的fixture机制极大地提高了测试代码的组织性和可维护性,使得编写和执行测试变得更加高效和方便。通过理解并熟练运用这些特性,你可以更好地利用pytest框架进行测试...

    fixture-factory-js:轻松为您的 js 测试创建基于模板的数据

    夹具工厂 JS Fixture Factory JS 是一个 Javascript 库,可为您的测试生成假对象... Fixture.of("Employee").addTemplate( "Developer", { name: Fixture.firstName(), lastName: Fixture.lastName(), emai

    Fixture_EA.rslib

    Fixture_EA.rslib

    Spring 2.0 AOP 完整例子

    网上找了很多例子多数都不能运行。包括after,before,round,throw切入,可对类直接拦截,不需要定义接口文件,自己研究了2天整理出来的。 Spring AOP 的完整例子,可直接运行。带jar包。

    NUnit.Framework-3.12.0.zip

    3. **测试组织**:通过`[TestFixture]`和`[SetUp]`、`[TearDown]`等特性,可以将相关测试组织成类,方便管理和执行。 4. **测试运行器**:NUnit提供命令行工具、Visual Studio插件等多种方式运行测试,便于集成到...

    Angular单元测试之事件触发的实现

    const ele = fixture.debugElement.query(By.css("#id")); ele.triggerEventHandler('click', null) fixture.detectChanges(); // 更新视图 // 方法二 const ele = fixture.nativeElement.querySelector("#id"); ele...

    AutoFixture.zip

     int expectedNumber = fixture.Create();  MyClass sut = fixture.Create();  // Exercise system  int result = sut.Echo(expectedNumber);  // Verify outcome  Assert.AreEqual...

    PyPI 官网下载 | webtest_flask_fixture-0.1.0.tar.gz

    《PyPI官网下载:深入解析webtest_flask_fixture-0.1.0.tar.gz》 在Python的世界里,PyPI(Python Package Index)是官方的软件仓库,它为开发者提供了无数的开源库和模块,方便他们构建、分享和发现Python项目。本...

    PCIe M.2 Test Fixture RFP1.0.pdf

    PCIe M.2 Test Fixture RFP1.0

    Laravel开发-fixture-l4

    在Laravel框架中,fixture是用于填充数据库的测试数据,它可以帮助开发者在进行功能测试时创建预设的数据环境。"Laravel开发-fixture-l4"是一个专为Laravel4设计的简单易用的fixture库,旨在简化数据填充过程,提高...

    orderingg:2018年软件工程课程中使用的应用程序。 UTN-FRLP

    UTN-FRLP相依性Python3 烧瓶sqlite依赖性pip install -r requirements.txt 达托斯基地英文版export FLASK_APP=orderingg.pyflask db upgradepython fixture.py 英文Windows -cmd set FLASK_APP=orderingg.pyflask ...

Global site tag (gtag.js) - Google Analytics