Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在文件中存储测试数据的最佳格式是什么?_Ruby On Rails_Unit Testing_Testing - Fatal编程技术网

Ruby on rails 在文件中存储测试数据的最佳格式是什么?

Ruby on rails 在文件中存储测试数据的最佳格式是什么?,ruby-on-rails,unit-testing,testing,Ruby On Rails,Unit Testing,Testing,在我们的项目中,我们使用存储在.sql文件中的测试数据,我们有时调用这些文件来用这些测试数据重新创建数据库。在该文件中,我们按如下方式存储数据: Insert into Table1 ('col1', 'col2') values ('val1', 'val2'); Insert into Table1 ('col1', 'col2') values ('val3', 'val2'); Insert into Table1 ('col1', 'col2') values ('val4', 'va

在我们的项目中,我们使用存储在.sql文件中的测试数据,我们有时调用这些文件来用这些测试数据重新创建数据库。在该文件中,我们按如下方式存储数据:

Insert into Table1 ('col1', 'col2') values ('val1', 'val2');
Insert into Table1 ('col1', 'col2') values ('val3', 'val2');
Insert into Table1 ('col1', 'col2') values ('val4', 'val2');
...
问题是,当我们添加或删除列时,我们必须遍历所有文件(在我的例子中,有许多大文件)并手动添加列和相应的值:这是大脑中的一大难题

所以我在想,其他人如何存储他们的测试数据?我认为rails方式,使用.yml文件(键值对)是一种很好的方式,但是在非ruby rails环境中如何使用它呢

例如,在rails中:

david:
 name: David Heinemeier Hansson
 birthday: 1979-10-15
 profession: Systems development

steve:
 name: Steve Ross Kellock
 birthday: 1974-09-27
 profession: guy with keyboard

如果新列是模式中的非空/必需列,那么我可以看到更新数据填充sql脚本时出现的问题。但是,如果新列与特定测试无关,则相应的sql文件应该能够忽略模式更新

另一种方法可能是

  • 维护预先填充了已知值的测试数据库。创建一个副本并每次对该副本运行测试。每次测试运行后丢弃
  • 每次更新模式时,都要像rails中那样通过迁移脚本进行更新。。然后,也可以针对测试数据库运行这些测试,所需的工作量相对可以忽略不计

如果新列是架构中的非空/必需列,那么我可以看到更新数据填充sql脚本时出现的问题。但是,如果新列与特定测试无关,则相应的sql文件应该能够忽略模式更新

另一种方法可能是

  • 维护预先填充了已知值的测试数据库。创建一个副本并每次对该副本运行测试。每次测试运行后丢弃
  • 每次更新模式时,都要像rails中那样通过迁移脚本进行更新。。然后,也可以针对测试数据库运行这些测试,所需的工作量相对可以忽略不计

我喜欢在数据库中创建一个单独的测试模式。通过这种方式,我不必更改代码以使其可测试,从开发人员到测试数据库的任何更改迁移都应该是一个简单的过程。Rails版本如何避免您手动添加新列和数据?Rails版本更好,因为删除/添加列与在文件中添加新行一样简单。。。对于INSERT,删除列就是删除列名并在
VALUES
子句中查找其对应的值。对于一个包含20多列的表,它有点让人心潮澎湃。我喜欢测试数据库的想法,但您仍然需要为迁移编写一些SQL。我只是喜欢在我的数据库中创建一个单独的测试模式。通过这种方式,我不必更改代码以使其可测试,从开发人员到测试数据库的任何更改迁移都应该是一个简单的过程。Rails版本如何避免您手动添加新列和数据?Rails版本更好,因为删除/添加列与在文件中添加新行一样简单。。。对于INSERT,删除列就是删除列名并在
VALUES
子句中查找其对应的值。对于一个包含20多列的表,它有点让人心潮澎湃。我喜欢测试数据库的想法,但您仍然需要为迁移编写一些SQL。此解决方案在注释中。由于熟悉rails的方式,我也认为这是一个解决方案。有点希望另一个解决方案,比较:)这个解决方案在评论中。由于熟悉rails的方式,我也认为这是一个解决方案。有点希望找到另一种解决方案,比较一下:)