答案 0 :(得分:7)
这是我对动态语言的“抱怨”之一。我想测试语义,而不是类型错误;-)话虽如此,一个好的测试框架/设置在所有非平凡的情况下都是必须的,良好的代码覆盖和经过测试的要求非常重要。
如果您确实想要沿着JVM上的静态类型路径(我有),我强烈建议您查看Scala。来自Ruby,与Java相比,它的痛苦(实际上以不同的方式实现很多乐趣)要少得多。你可以“保留”你认为理所当然的东西 - 基于表达式的语法,闭包,在许多地方省略类型的能力(不像Ruby那样开放,但是你确实得到了编译时类型检查;-),一切(*) - 是一个对象OO,统一的访问器方法,轻松构建DSL的能力,以及糖 - 并通过本地类型推断,模式匹配,相对丰富的集合框架获得静态类型语言的好处,以及与Java的良好集成(包括众多的Web框架,还有一些Scala特定的框架,它们利用Scala语言)。
C#3.0 / 4.0(和.NET3.5 +)也不是太破旧(但是避免使用C#2.0,现在希望它是一个遗物),引入LINQ /闭包,基本类型推断等 很好的语言功能我发现大多数任务都“可以接受”(猜猜我如何评价Java作为一种语言;-)。但是,C#是一种CLR目标语言(有一个.NET Scala端口,但我不确定状态 - 它不是主要的目标平台)。
由于我已经提到了Scala,我还应该提到F#(现在是一种“官方”的.NET语言),它将“与OO一起使用”的方法与OCaml类似 - Scala更像是反向的,我会用它来描述它作为“有功能的OO”。我听说过/反对F#与C#w.r.t类型系统相比,但没有F#的实际经验。你可能喜欢也可能不喜欢范式转换。
快乐的编码。
答案 1 :(得分:2)
当你提到Rails,并且鉴于你对Scala感兴趣,你一定要检查Lift。这是一个2008 interview及其创建者,以及一个2009 presentation(视频),我将其链接起来,因为它们虽然陈旧,却将Lift与其他语言的替代品进行比较。
如果Lift不是你的事,请放心,other Scala web frameworks。
答案 2 :(得分:1)
此类测试通常不在Rails中完成。不要因为必须这样做而烦恼,不要担心它。或者或许可以更好地解释为什么你认为这是一个问题,因为大多数Rails程序员都没有。
<强>更新强>
撰写test_include_with_order_works
的人确保Rails在这种特殊情况下将符号解释为与字符串相同。这似乎不是你必须测试的东西,因为Rails已经为你提供并测试了这个功能。坦率地说,我有点惊讶,任何人都会担心一个符号是否会像一个字符串一样运作。我们都知道它可以并经常这样做。
一般来说,我认为Rails框架必须确保您不需要的东西,以使其实现符合其设计。我相信动态类型语言的工作原理是客户端代码不会传递会破坏他们调用的方法的参数。如果他们这样做,他们就无法调用这些方法。你不必浪费时间确保你的方法在提供太多参数时会抛出异常,当你的方法同样容易(并且应该)忽略额外的参数时。
所以,我不确定你提供的例子是否真的证明了在Rails中进行非语义测试的必要性。