Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Beck's first xUnit framework was SUnit, for Smalltalk, but Beck's second take was JUnit, which is for Java. Java was and still is a statically typed language.

Tests are there to detect logical correctness of the unit under test, very few type systems can catch errors like using - instead of + in a mathematical formula, for instance. You either need to go into dependently typed languages or languages that otherwise permit embedding proofs (SPARK/Ada).



In dynamic languages tests also tend to fill the role of the compiler is I think the parent's point. Dynamic/interpreted language code might have syntax errors or be otherwise incorrect (including type errors) and you often don't find those until they code is run.


When this buggy method is compiled (not run) with Smalltalk, errors and warnings are shown. The code cannot be run because it failed to compile.

hnQuestion

| list max |

list := #(1 8 4 5 3).

! Syntax Error: Nothing more expected

1 to: list size do: [:i |

max < (list at: i)

? Uses ifTrue:/ifFalse: instead of min: or max:

ifTrue: [max := (list at: i)].

ifFalse: [max := max].

].


For future reference, indent with 2 spaces to get code formatting.

https://news.ycombinator.com/formatdoc


For future reference, does "code formatting" provide a way to distinguish

  list := #(1 8 4 5 3).
from

! Syntax Error: Nothing more expected

as-well-as from comment text ?


That’s a fair point. However dynamic languages tend to have very good linting that catch many basic type errors.

They can also run way more often during development, down to the function/expression level.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: