最近尝试使用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.ps1
自动夹具移除(AFR)技术用于去除印刷电路板(PCB)或封装上不希望的夹具效应,以获取I/O缓冲器处的纯净抖动水平。随着数据速率的提高和允许的抖动水平的降低,准确地表征和去除这些夹具变得越来越重要。...
SAE AS6944 -2023 Dynamic Seal Test Fixture.pdf
同Calibration一样,fixture同样创建一个新的坐标系,不同之处在于经过Calibration之后生成的是一个**固定坐标系**,而Fixture之后是一个“**随动**”的坐标系。此外,经过Calibration之后的坐标空间一般为物理坐标...
5. **简洁的API**:插件提供了简单的API,例如`fixture.url()`和`fixture.set()`,使得在测试用例中设置和加载fixture变得直观易用。 6. **可配置性**:`karma-fixture`允许通过配置文件调整其行为,比如设定...
工业机器人 robotstudio 从入门到精通
例如,你可以使用`fixture.create()`方法来生成一个特定类型的实例,或者使用`fixture.fill()`方法来填充已有的对象。对于特定需求,还可以通过注册自定义的生成规则,实现对特定类型数据的定制化生成。 Kotlin-...
pytest.main('-q test_fixture.py') ``` pytest的fixture机制极大地提高了测试代码的组织性和可维护性,使得编写和执行测试变得更加高效和方便。通过理解并熟练运用这些特性,你可以更好地利用pytest框架进行测试...
夹具工厂 JS Fixture Factory JS 是一个 Javascript 库,可为您的测试生成假对象... Fixture.of("Employee").addTemplate( "Developer", { name: Fixture.firstName(), lastName: Fixture.lastName(), emai
Fixture_EA.rslib
网上找了很多例子多数都不能运行。包括after,before,round,throw切入,可对类直接拦截,不需要定义接口文件,自己研究了2天整理出来的。 Spring AOP 的完整例子,可直接运行。带jar包。
3. **测试组织**:通过`[TestFixture]`和`[SetUp]`、`[TearDown]`等特性,可以将相关测试组织成类,方便管理和执行。 4. **测试运行器**:NUnit提供命令行工具、Visual Studio插件等多种方式运行测试,便于集成到...
const ele = fixture.debugElement.query(By.css("#id")); ele.triggerEventHandler('click', null) fixture.detectChanges(); // 更新视图 // 方法二 const ele = fixture.nativeElement.querySelector("#id"); ele...
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》 在Python的世界里,PyPI(Python Package Index)是官方的软件仓库,它为开发者提供了无数的开源库和模块,方便他们构建、分享和发现Python项目。本...
PCIe M.2 Test Fixture RFP1.0
在Laravel框架中,fixture是用于填充数据库的测试数据,它可以帮助开发者在进行功能测试时创建预设的数据环境。"Laravel开发-fixture-l4"是一个专为Laravel4设计的简单易用的fixture库,旨在简化数据填充过程,提高...
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 ...