- 浏览: 275361 次
- 性别:
- 来自: 尤溪
文章分类
最新评论
-
palytoxin:
我现在也发现是这样
关于分享 -
float2net:
Java社区,分享有利于提高。
关于分享 -
hz_qiuyuanxin:
头晕啊,啊邱
RSpec学习笔记 -
reyesyang:
...
关于分享 -
Hooopo:
一般实现map都先实现each
在 Ruby 中对树状结构(tree)进行 map 操作
1,页面的测试。
假设某view中有一个表单,表单里有3个字段,《The Rspec Book》中的做法是为这3个字段各写一个example:
而我认为这样写就足够了:
我不明白前一种写法的好处。书上为什么要这么写?
2,多层链式调用的setup问题:
虽然我极力避免2层及2层以上的链式调用,但有时候似乎不得不用,例如:
这种情况下controller测试进行之前的setup很麻烦:
对应要测的controller:
这种问题有什么办法解决?
======================================================================
关于问题2我认真的想了一会,其实rails提供的那种方法本身就破坏了封装,直接把products这么一个集合暴露出来,我们关心的只是往store里添加一个product,并不关心store内部是个什么结构。
我觉得可以给store加上build_product和create_product方法,虽然这两个方法是在has_one和belongs_to的关系中自动生成的,但这里store和product是has_many关系,并没有这两个方法。一开始我想给它们起名叫做new_product和add_product,但是这样似乎理解起来更费劲,不如就按照rails的规则叫build_product和create_product得了。
修改后的代码如下:
这里@current_store的setup过程又可以提出来,放在一个叫login_as_seller的macros里面,以后只要在需要的地方调用一下login_as_seller即可:
当然,为了以上代码能够正常工作,我们需要为Store模型添加build_product的测试,并实现之。
=====================================================================
2010-9-3 19:47:56 我: hi
2010-9-3 19:49:37 Kadvin hi
2010-9-3 19:49:53 我: 呵呵,有空不?想请教点问题
2010-9-3 19:50:01 Kadvin 有
2010-9-3 19:51:03 我: controller中出现这样的代码好还是不
好?current_store.products.build params[:product]
2010-9-3 19:51:41 Kadvin 可以接受
2010-9-3 19:51:48 我: 也就是说有点问题?
2010-9-3 19:52:10 Kadvin 把逻辑往模型里面放,也不要走得太过,什么都往模型里面放,也会导致模型臃肿。
2010-9-3 19:53:03 Kadvin 是有一点点的问题,就是一般写得好的编码,调用层次不应该超过3层 A类里面 b.c.d.e 这样调用,就基本上说明对b的封装不足。
2010-9-3 19:53:12 我: 嗯,可是这里出现了2层的链式调用,暴露了products,写测试的时候setup好像有些麻烦。
2010-9-3 19:53:16 我: 是呀,我也是这么觉得。
2010-9-3 19:53:51 Kadvin 但你完全追求两层调用,这会导致你系统过度设计。
2010-9-3 19:54:18 Kadvin 过度设计(Over Design),这是很多初搞软件的人犯的错误。
2010-9-3 19:54:32 Kadvin 所以,你这里这个代码,是可以接受的。
2010-9-3 19:55:00 Kadvin 因为Store -has_many-> products,你是通过ActiveRecord的DSL建立的一个很简便的关系。
2010-9-3 19:54:38 我: 可是测试变得难写了咋办?
2010-9-3 19:55:34 Kadvin 你测试用例的Fixture里面,应该做好准备啊。
2010-9-3 19:55:40 Kadvin 我没觉得数据困难了多少
2010-9-3 19:56:39 我: 咦,你写controller测试需要用到fixture吗?
2010-9-3 19:57:27 我: 我用的是stub和mock
2010-9-3 19:58:00 我: fixture我们现在用factory_girl来替代,也只是在测model的时候用到。
2010-9-3 19:58:38 Kadvin 嗯,一般是Stub就够了
2010-9-3 19:58:51 Kadvin 我用DataSet
2010-9-3 19:58:55 Kadvin 做模型的Fixture
2010-9-3 20:02:27 我: 哦。这是我今天记的一点东西,其中第2个问题就是现在咱们说的这个问题:http://yuan.iteye.com/blog/754367 在后面我自己给自己回复,试着给出一个解决办法,用这个办法看起来before那块代码简单得多了,但是model里要多一个方法。那如果给每个 has_many关系添加这么一个方法,好像就会有许多重复代码。
2010-9-3 20:00:40 Kadvin 你这个地方
2010-9-3 20:00:54 Kadvin 那build自然就没问题了嘛~
2010-9-3 20:03:07 我: 这样啊,我一直以为controller的测试代码里出现真实的model不好。
2010-9-3 20:04:46 Kadvin 如果你的模型是经过测试的,那没啥不好的。尤其是,如果你用的模型的方法是Rails自身的(说明经过测试)
2010-9-3 20:04:49 Kadvin 不能太僵化
2010-9-3 20:05:39 我: 我想想
2010-9-3 20:06:17 Kadvin 我看了下你的文章,觉得你完全弃用AR做控制器测试的思路太呆板了。
2010-9-3 20:07:02 Kadvin 一般而言,控制器的测试是基于模型的测试,适当引入一些预制的模型,会大大降低控制器的setup工作。
2010-9-3 20:13:34 我: 那问题1呢?
2010-9-3 20:14:19 Kadvin 你的观点正确,我也是这么搞的,一下子验证多个。
2010-9-3 20:14:26 我:
2010-9-3 20:16:00 Kadvin 关键是,找你信得过的东西来做stub
2010-9-3 20:16:27 我: 信得过的是指经过测试的或者Rails本身提供的api是吧?
2010-9-3 20:16:33 Kadvin yes
=====================================================================
http://rspec.info/rails/writing/controllers.html
=====================================================================
Stub Chain
Let’s say we’re building an educational website with Ruby on Rails, and we need a database query that finds all of the published articles written in the last week by a particular author. Using a custom DSL built on ActiveRecord named scopes, we can express that query like so:
Now let’s say that we want to stub the return value of authored_by( ) for an example. Using standard stubbing, we might come up with something like this:
That’s a lot of stubs! Instead of revealing intent it does a great job of hiding it. It’s complex, confusing, and if we should ever decide to change any part of the chain we’re in for some pain changing this. For these reasons, many people simply avoid writing stubs when they’d otherwise want to. Those people don’t know about RSpec’s stub_chain( ) method, which allows us to write this:
Much nicer! Now this is still quite coupled to the implementation, but it’s also quite a bit easier to see what’s going on and map this to any changes we might make in the implementation.
最后的结果是:我承认在current_store.products.build这个地方追求1层的方法调用有点过了。但我仍然坚持在controller里使用mock/stub,不碰fixture/factory等model相关的东西。stub_chain完美解决以上问题。并且,对属性的链式访问,我仍然会继续追求1层的方法调用——如果你采用自顶向下的开发方式,会发现这是自然而然的事情。至于rails的current_store.products.build/create这些方法,这属于rails实现的问题,其实rails也可以实现成current_store.build_product,不是吗?
假设某view中有一个表单,表单里有3个字段,《The Rspec Book》中的做法是为这3个字段各写一个example:
it 'renders a form to create product' it 'renders a text field for product name' it 'renders a text field for product price' it 'renders a text field for product sku'
而我认为这样写就足够了:
it 'renders a form to create product' do render response.should have_selector('form', :action => 'xxaction', :method => 'post') do |form| form.should have_selector('input[type=text]', :name => 'product[name]') form.should have_selector('input[type=text]', :name => 'product[price]') form.should have_selector('input[type=text]', :name => 'product[sku]') end end
我不明白前一种写法的好处。书上为什么要这么写?
2,多层链式调用的setup问题:
虽然我极力避免2层及2层以上的链式调用,但有时候似乎不得不用,例如:
current_store.products.build params[:product] #store has many products
这种情况下controller测试进行之前的setup很麻烦:
describe Mystore::ProductsController, 'POST create' do before do @product = mock_model(Product).as_null_object @products = [stub!(:products)] @current_store = stub!('current_store') @current_store.stub!(:products => @products) controller.stub!(:current_store => @current_store) @products.stub!('build' => @product) end it 'creates product with params' do @products.should_receive(:build).with('name' => 'the rspec book') post 'create', :product => {:name => 'the rspec book'} end #....
对应要测的controller:
def create @product = current_store.products.build params[:product] #...
这种问题有什么办法解决?
======================================================================
关于问题2我认真的想了一会,其实rails提供的那种方法本身就破坏了封装,直接把products这么一个集合暴露出来,我们关心的只是往store里添加一个product,并不关心store内部是个什么结构。
我觉得可以给store加上build_product和create_product方法,虽然这两个方法是在has_one和belongs_to的关系中自动生成的,但这里store和product是has_many关系,并没有这两个方法。一开始我想给它们起名叫做new_product和add_product,但是这样似乎理解起来更费劲,不如就按照rails的规则叫build_product和create_product得了。
修改后的代码如下:
describe Mystore::ProductsController, 'POST create' do before do @current_store = mock_model(Store).as_null_object controller.stub!(:current_store => @current_store) @product = mock_model(Product).as_null_object @current_store.stub!(:build_product => @product) end it 'creates product with params' do @current_store.should_receive(:build_product).with('name' => 'the rspec book') post 'create', :product => {:name => 'the rspec book'} end #...
def create @product = current_store.build_product params[:product] #...
这里@current_store的setup过程又可以提出来,放在一个叫login_as_seller的macros里面,以后只要在需要的地方调用一下login_as_seller即可:
class Store;end class User;end module ControllerMacros def login_as_seller @current_user = mock_model(User).as_null_object controller.stub!(:current_user => @current_user) @current_store = mock_model(Store).as_null_object controller.stub!(:current_store => @current_store) end end
describe 'as a seller' do before do login_as_seller end describe Mystore::ProductsController, 'POST create' do before do @product = mock_model(Product).as_null_object @current_store.stub!(:build_product => @product) end it 'creates product with params' do @current_store.should_receive(:build_product).with('name' => 'the rspec book') post 'create', :product => {:name => 'the rspec book'} end #...
当然,为了以上代码能够正常工作,我们需要为Store模型添加build_product的测试,并实现之。
=====================================================================
2010-9-3 19:47:56 我: hi
2010-9-3 19:49:37 Kadvin hi
2010-9-3 19:49:53 我: 呵呵,有空不?想请教点问题
2010-9-3 19:50:01 Kadvin 有
2010-9-3 19:51:03 我: controller中出现这样的代码好还是不
好?current_store.products.build params[:product]
2010-9-3 19:51:41 Kadvin 可以接受
2010-9-3 19:51:48 我: 也就是说有点问题?
2010-9-3 19:52:10 Kadvin 把逻辑往模型里面放,也不要走得太过,什么都往模型里面放,也会导致模型臃肿。
2010-9-3 19:53:03 Kadvin 是有一点点的问题,就是一般写得好的编码,调用层次不应该超过3层 A类里面 b.c.d.e 这样调用,就基本上说明对b的封装不足。
2010-9-3 19:53:12 我: 嗯,可是这里出现了2层的链式调用,暴露了products,写测试的时候setup好像有些麻烦。
2010-9-3 19:53:16 我: 是呀,我也是这么觉得。
2010-9-3 19:53:51 Kadvin 但你完全追求两层调用,这会导致你系统过度设计。
2010-9-3 19:54:18 Kadvin 过度设计(Over Design),这是很多初搞软件的人犯的错误。
2010-9-3 19:54:32 Kadvin 所以,你这里这个代码,是可以接受的。
2010-9-3 19:55:00 Kadvin 因为Store -has_many-> products,你是通过ActiveRecord的DSL建立的一个很简便的关系。
2010-9-3 19:54:38 我: 可是测试变得难写了咋办?
2010-9-3 19:55:34 Kadvin 你测试用例的Fixture里面,应该做好准备啊。
2010-9-3 19:55:40 Kadvin 我没觉得数据困难了多少
2010-9-3 19:56:39 我: 咦,你写controller测试需要用到fixture吗?
2010-9-3 19:57:27 我: 我用的是stub和mock
2010-9-3 19:58:00 我: fixture我们现在用factory_girl来替代,也只是在测model的时候用到。
2010-9-3 19:58:38 Kadvin 嗯,一般是Stub就够了
2010-9-3 19:58:51 Kadvin 我用DataSet
2010-9-3 19:58:55 Kadvin 做模型的Fixture
2010-9-3 20:02:27 我: 哦。这是我今天记的一点东西,其中第2个问题就是现在咱们说的这个问题:http://yuan.iteye.com/blog/754367 在后面我自己给自己回复,试着给出一个解决办法,用这个办法看起来before那块代码简单得多了,但是model里要多一个方法。那如果给每个 has_many关系添加这么一个方法,好像就会有许多重复代码。
2010-9-3 20:00:40 Kadvin 你这个地方
stub(:current_store) do Store.first end给一个实际的store对象
2010-9-3 20:00:54 Kadvin 那build自然就没问题了嘛~
2010-9-3 20:03:07 我: 这样啊,我一直以为controller的测试代码里出现真实的model不好。
2010-9-3 20:04:46 Kadvin 如果你的模型是经过测试的,那没啥不好的。尤其是,如果你用的模型的方法是Rails自身的(说明经过测试)
2010-9-3 20:04:49 Kadvin 不能太僵化
2010-9-3 20:05:39 我: 我想想
2010-9-3 20:06:17 Kadvin 我看了下你的文章,觉得你完全弃用AR做控制器测试的思路太呆板了。
2010-9-3 20:07:02 Kadvin 一般而言,控制器的测试是基于模型的测试,适当引入一些预制的模型,会大大降低控制器的setup工作。
2010-9-3 20:13:34 我: 那问题1呢?
2010-9-3 20:14:19 Kadvin 你的观点正确,我也是这么搞的,一下子验证多个。
2010-9-3 20:14:26 我:
2010-9-3 20:16:00 Kadvin 关键是,找你信得过的东西来做stub
2010-9-3 20:16:27 我: 信得过的是指经过测试的或者Rails本身提供的api是吧?
2010-9-3 20:16:33 Kadvin yes
=====================================================================
RSpec官方文档 写道
We strongly recommend that you use RSpec’s mocking/stubbing frameworkto intercept class level calls like :find, :create andeven :new to introduce mock instances instead of real active_record instances.
This allows you to focus your specs on the things that the controller does and notworry about complex validations and relationships that should be described indetail in the Model Examples
This allows you to focus your specs on the things that the controller does and notworry about complex validations and relationships that should be described indetail in the Model Examples
http://rspec.info/rails/writing/controllers.html
=====================================================================
Stub Chain
Let’s say we’re building an educational website with Ruby on Rails, and we need a database query that finds all of the published articles written in the last week by a particular author. Using a custom DSL built on ActiveRecord named scopes, we can express that query like so:
Article.recent.published.authored_by(params[:author_id])
Now let’s say that we want to stub the return value of authored_by( ) for an example. Using standard stubbing, we might come up with something like this:
recent= double() published= double() authored_by = double() article= double() Article.stub(:recent).and_return(recent) recent.stub(:published).and_return(published) published.stub(:authored_by).and_return(article)
That’s a lot of stubs! Instead of revealing intent it does a great job of hiding it. It’s complex, confusing, and if we should ever decide to change any part of the chain we’re in for some pain changing this. For these reasons, many people simply avoid writing stubs when they’d otherwise want to. Those people don’t know about RSpec’s stub_chain( ) method, which allows us to write this:
article = double() Article.stub_chain(:recent, :published, :authored_by).and_return(article)
Much nicer! Now this is still quite coupled to the implementation, but it’s also quite a bit easier to see what’s going on and map this to any changes we might make in the implementation.
最后的结果是:我承认在current_store.products.build这个地方追求1层的方法调用有点过了。但我仍然坚持在controller里使用mock/stub,不碰fixture/factory等model相关的东西。stub_chain完美解决以上问题。并且,对属性的链式访问,我仍然会继续追求1层的方法调用——如果你采用自顶向下的开发方式,会发现这是自然而然的事情。至于rails的current_store.products.build/create这些方法,这属于rails实现的问题,其实rails也可以实现成current_store.build_product,不是吗?
评论
3 楼
yuan
2011-05-10
关于第1个问题,我猜测作者是为了遵循one assertion per test。
但这里有个问题是,以下代码也可以通过作者所写的测试:
但显然以上代码是不符合需求的。如果为每个字段写一个example,并在每个example中指定action、method,重复代码就太多了。所以,在这个地方,目前我仍然坚持用后面那种写法。
关于one assertion per test: http://www.artima.com/weblogs/viewpost.jsp?thread=35578
但这里有个问题是,以下代码也可以通过作者所写的测试:
<form action='xxaction' method='post'></form> <form action='yyaction' method='get'> <input type='text' name='product[name]'/> <input type='text' name='product[price]'/> <input type='text' name='product[sku]'/> </form>
但显然以上代码是不符合需求的。如果为每个字段写一个example,并在每个example中指定action、method,重复代码就太多了。所以,在这个地方,目前我仍然坚持用后面那种写法。
关于one assertion per test: http://www.artima.com/weblogs/viewpost.jsp?thread=35578
2 楼
夜鸣猪
2010-09-25
这个好
值得研究
值得研究
1 楼
yuan
2010-09-19
这可能是rspec-rails的一只bug:
controller如下:
相应的测试代码如下:
无论如何测试都通不过:
Mock "render_proxy" expected :render with ("index", {:layout=>false}) once, but received it 0 times
但这样的代码却没问题:
或者这样也没问题:
难道rspec-rails只认第一个参数?
controller如下:
def index #..... render 'index', :layout => !request.xhr? #...... end
相应的测试代码如下:
controller.should_receive(:render).with 'index', :layout => false
无论如何测试都通不过:
Mock "render_proxy" expected :render with ("index", {:layout=>false}) once, but received it 0 times
但这样的代码却没问题:
def index #..... render :partial => 'categories', :layout => !request.xhr? #...... end
controller.should_receive(:render).with(:partial => 'categories', :layout => false)
或者这样也没问题:
def index #..... render 'index' #...... end
controller.should_receive(:render).with('index')
难道rspec-rails只认第一个参数?
发表评论
-
BDD on Rails
2010-05-11 02:59 0首先,嘿嘿,我对敏捷 ... -
强大的 Rails 2 查询、搜索插件:SearchLogic
2010-04-20 23:31 5456发现还有人在看这个博客,这个 SearchLogic 只支持 ... -
authlogic-openid
2010-04-20 00:32 0http://github.com/binarylogic/a ... -
测试驱动开发实战(authlogic学习笔记)
2010-04-17 00:06 0这会是个很cool的笔记 cucumber还不会用,只用R ... -
RoR简单培训。
2010-04-12 10:08 0目的 上周二Bob给大家从总体上概括了一下Rails的开发。我 ... -
用RSpec和Webrat为页面写测试
2010-03-10 23:26 0The RSpec Book 23章(不完全照书上记,而是我自 ... -
rails杂记
2010-03-08 11:36 1443=======Rails2======= 用RSpec测试A ... -
Rails文件上传利器——paperclip笔记
2010-02-27 12:04 14945Githubhttp://wiki.github.com/th ... -
为SearchLogic添加一个remote_form_for方法。
2010-02-10 15:00 1399稍微看了一下,好像挺简单,只是处理了一下参数。 # A ... -
A Guide to Testing Rails Applications
2010-02-03 19:56 0什么是Fixtures fixtures允许你在测试运行之前往 ... -
改个bug
2010-01-20 17:38 1230问题见:http://yuan.iteye.c ... -
reset/reload
2010-01-20 16:26 1135http://caboo.se/doc/classes/Act ... -
Acts As Taggable On Steroids
2010-01-20 13:53 2617参考着mephisto写blog程序 ... -
Active Record Validations and Callbacks
2009-10-18 02:45 2383参考链接:http://guides.ru ... -
Layout in Rails
2009-10-12 17:28 4740参考链接:http://guides.rubyonrails. ... -
Rendering in Rails
2009-10-10 02:10 4531参考链接:http://guides.rubyonrails. ... -
如何为Rails的views写测试。
2009-10-01 16:53 1118原文链接:http://weblog.jamisbuck.or ... -
Rails Form helpers
2009-09-28 03:31 5174参考链接:http://guides.ru ... -
rails2.3 routes笔记
2009-09-23 04:10 2844参考链接:http://guides.ru ... -
rails中分模块开发。
2009-09-18 14:48 2313我没事就喜欢拿blog练手,blog简单嘛。 嗯,其实这是 ...
相关推荐
1.程序功能说明: MATLAB实现多种群遗传算法(完整代码) 逼近C=[9,8,7,6,5,4,3,2,1]的9维向量. 2.代码说明:注释清晰,参数和变量说明清晰,方便更改、方便初学者使用,模块化编程,方便替换目标函数。运行环境Windows7及以上操作系统,MATLAB2014a及以上版本。 3.适用专业:计算机、电子信息工程、数学、物理、机械工程、土木工程等专业的大学生、研究生毕业设计,各类专业的课程设计、海外留学生作业等。 4作者介绍:资深算法工程师, 从事Matlab、Python算法仿真工作15年,专业研究遗传算法、粒子群算法、蚁群算法、鲸鱼算法、狼群算法等. 有问题联系QQ: 1579325979
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
小学元旦晚会PPT 模版
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
MATLAB中的语义分割技术探究与应用实践,matlab,语义分割 ,matlab; 语义分割,Matlab语义分割技术解析
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
1、文件内容:pulseaudio-10.0-6.el7_9.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/pulseaudio-10.0-6.el7_9.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
"基于OpenCV与深度学习的人脸表情识别系统:利用Python与PyQt构建的可视化实时检测工具",基于OpenCV的人脸表情识别系统 相关技术:python,opencv,pyqt,深度学习 (请自行安装向日葵远程软件,以便提供远程帮助) 可编译为.exe文件。 软件说明:摄像头实时检测,加载照片,视频均可。 有基础的同学,可自行修改完善。 第一张和第二张为运行截图。 ,基于OpenCV的人脸表情识别系统; Python; OpenCV; PyQt; 深度学习; 实时检测; 照片和视频支持; 可编译为.exe文件; 运行截图。,"基于OpenCV与深度学习的人脸表情识别系统"
,步进方案,步进源码,两相步进矢量控制,超前角控制两种模式,成熟产品方案 支持特殊功能定制
三相储能PCS双向能量流动与Matlab仿真控制研究——基于SVPWM调制技术的建模与应用,三相储能PCS(Matlab仿真) 1.可实现Grid to Battery,Battery to Grid的能量双向流动。 2.本仿真基于Matlab仿真建立的模型, 3.采用SVPWM进行控制 ,三相储能PCS; 双向能量流动; Matlab仿真; SVPWM控制,三相储能PCS:能量双向流Matlab仿真模型(SVPWM控制)
deepseek部署教程.md
nodejs010-nodejs-ansicolors-0.3.2-1.el6.centos.alt.noarch.rpm
基于三菱PLC的四路抢答器控制系统原理及实践:含带解释的梯形图与IO分配图解,三菱 MCGS 基于PLC的四路抢答器控制系统 带解释的梯形图接线图原理图图纸,io分配,组态画面 ,三菱MCGS; PLC四路抢答器; 控制系统; 梯形图接线图; 原理图图纸; IO分配; 组态画面。,三菱PLC四路抢答器控制系统原理图及组态画面解析
基于运动数据时空特征提取的人类运动片段.pdf
基于机器学习的选股模型及投资组合研究.pdf
ollama安装包。。。。。。。。。。。。。。。。。
nodejs010-nodejs-ansistyles-0.1.3-1.el6.centos.alt.x86_64.rpm
Screenshot_20250201_111207_com_tencent_mm_LauncherUI.jpg
基于时空Transformer的端到端的视频注视目标检测.pdf