tro*_*ine 20 ruby tdd haskell setup-project bundler
读者注意:请耐心等待.我保证会有一个问题.
我有一个问题需要解决并自己思考"哦,我会用Ruby做的."
$ bundle gem problemsolver
create problemsolver/Gemfile
create problemsolver/Rakefile
create problemsolver/.gitignore
create problemsolver/problemsolver.gemspec
create problemsolver/lib/problemsolver.rb
create problemsolver/lib/problemsolver/version.rb
Initializating git repo in /tmp/harang/problemsolver
Run Code Online (Sandbox Code Playgroud)
删除s.add_development_dependency "rspec"
in中的注释problemsolver/problemsolver.gemspec
然后
$ bundle exec rspec --init
The --configure option no longer needs any arguments, so true was ignored.
create spec/spec_helper.rb
create .rspec
Run Code Online (Sandbox Code Playgroud)
新的测试进入spec/
并且必须在最终的文件中_spec.rb
.例如,spec/version_spec.rb
describe 'Problemsolver' do
it 'should be at version 0.0.1' do
Problemsolver::VERSION.should == '0.0.1'
end
end
Run Code Online (Sandbox Code Playgroud)
要运行规范 - 忽略像守卫这样的代码更改运行者 - 这是微不足道的:
$ bundle exec rspec
.
Finished in 0.00021 seconds
1 example, 0 failures
Run Code Online (Sandbox Code Playgroud)
你看不到它,但是这条信息很好地用彩色编码,以便快速"我搞砸了吗?" 扫描?对此非常好的事情:
添加覆盖工具,代码观察者,短信,行为测试工具和其他工具并不困难.
如果人们认为"哦,我会在Haskell中做到这一点",这与情况形成对比是不利的.
$ mkdir problemsolver
$ cd problemsolver/
$ cabal init
Package name [default "problemsolver"]?
Package version [default "0.1"]? 0.0.1
Please choose a license:
1) GPL
2) GPL-2
3) GPL-3
4) LGPL
5) LGPL-2.1
6) LGPL-3
* 7) BSD3
8) MIT
9) PublicDomain
10) AllRightsReserved
11) OtherLicense
12) Other (specify)
Your choice [default "BSD3"]?
Author name? Brian L. Troutwine
Maintainer email [default "brian@troutwine.us"]?
Project homepage/repo URL?
Project synopsis? Solves a problem.
Project category:
1) Codec
2) Concurrency
3) Control
4) Data
5) Database
6) Development
7) Distribution
8) Game
9) Graphics
10) Language
11) Math
12) Network
13) Sound
14) System
15) Testing
16) Text
17) Web
18) Other (specify)
Your choice? ProblemSolver
ProblemSolver is not a valid choice.
Your choice? 18
Please specify? ProblemSolver
What does the package build:
1) Library
2) Executable
Your choice? 2
Generating LICENSE...
Generating Setup.hs...
Generating y.cabal...
You may want to edit the .cabal file and add a Description field.
Run Code Online (Sandbox Code Playgroud)
"好极了,"你想,"我太过于沮丧,我敢打赌所有最新的Haskell软件开发最佳实践都在我的磁盘上等待."
$ ls
LICENSE problemsolver.cabal Setup.hs
Run Code Online (Sandbox Code Playgroud)
请允许我总结一下我的感受: :(
生成的阴谋文件甚至没有一个Main
规定,更说明了建立一个基本的项目.还是,好的.如果你稍微试图找到正确的搜索关键字,你将落在如何写一个Haskell程序,这是好的,除了:
Test.hs
,仅为QuickCheck,并且无法通过拆分文件测试继续项目.检查真实世界Haskell的第11章,你会发现它甚至没有提到 cabal和裙子完全是项目布局的问题.Don Stewart 在这里提到的任何资源都没有在上述任何一个中得到解决,我将注意到,Stewart先生没有解释如何使用任何引用的工具.
请注意,Haskell测试工作流程中接受的答案引用了一个项目,该项目已经充分展开,因此不是一个好的答案,但确实说
由于阴谋测试尚不存在 - 我们有一名学生正在为今年夏天的代码工作! - 我们拥有的最佳机制是使用cabal的用户钩子机制.
嘿,好吧,cabal文档!该相应部分确实有例子,但他们非常做作,但不失败,给人的印象,每个人都对自己的好运给你.
当然,总是测试框架似乎很好但是它的示例代码没有提供超出wiki中所见的任何东西,并且在我的程序复杂性增长的情况下我是不可扩展的挂钩开发将测试划分为可管理模块的方法.我甚至不确定HTF会发生什么,并同意沃尔科夫先生的评估.
Jelvis先生对链接的HTF问题的评论对我特别感兴趣:Haskell工具链非常糟糕地受到小决策的暴政.我不能真正踏踏实实地在手头的任务-解决我在Haskell的问题-因为我上了钩的让我的环境,只是右.为什么这很糟糕:
这只是简单的臭味.
也许我错了.是否存在一些宣传不佳的工具或密切开发的工具,以便在Haskell空间中执行与Bundler + Rspec类似的操作?如果没有,那么现在的Haskell测试中是否有一个广告宣传的典型例子,斯图尔特先生的所有引用好的东西都在其中?该项目创建或演示:
spec/
,Cucumber功能在,features/
),我错误地相信Haskell-land中没有这样的东西吗?
编辑0:请注意,Ruby语言社区不是唯一适用的比较.Paul R.在确定配置的强大电流方面是正确的.其他语言以其他方式解决了实现可扩展项目结构的问题:
Paul R.使用自定义模板的解决方案很有用,如果像C一样,有足够的文档来编译这样的东西.这仍然会遇到我试图在帖子中明确指出的问题,但它是可行的.Haskell的最佳产品 - 我所知道的 - 是"如何编写一个Haskell程序",但不足以相当于用手电筒和一瓶水将一个孤独的童子军扔在树林里.
此外,是的,静态类型很棒并且确实解决了许多本来需要进行显式测试的问题.如果它们是最终解决方案,或者甚至是足够的解决方案,那么快照框架就不会经过如此彻底的测试.(可以说是"复制快照核心."是我的问题的答案.)
目前没有一种方法可以设置测试套件.希望人们能够实现标准化cabal test
,这是开箱即用的.事实上,无论是HUnit
和QuickCheck
还提供与Haskell的平台,因此建立测试不需要下载任何额外的依赖.
你接受的旧答案没有提供相关信息,这是对的cabal test
.我编辑了它,现在确实如此!您也可能是正确的,Haskell wiki上的链接页面(也是在cabal test
可用之前编写)不提供有关当前测试最佳实践的信息.这是一个维基,我鼓励人们编辑它!但请注意,该页面提供了指向另一个页面的链接,该页面描述了如何构建更复杂的Haskell项目.
tldr; 使用cabal test
.我很喜欢test-framework
,cabal test
如果你愿意,你可以融入其中.对不起,这cabal test
是一种新的,并不是我们拥有的所有资源(通常是社区可编辑的)已经更新以指向它并描述如何使用它.更新大量资源和创建教程是社区的工作.在过去的几年中,我们应该更好地推广许多引入Haskell生态系统的新工具.
归档时间: |
|
查看次数: |
801 次 |
最近记录: |