Interestingly, refactoring usually works quite well for functional Haskell code without tests just relying on the types. (Of course the types won't help you in more imperative sections of your code, i.e. it's hard to guarantee a specific order of actions in the IO Monad with types only.)
You mean just like in Java?
Yes. But the pure part of your program tends to be bigger in Haskell than in Java.
But JUnit did make them mainstream, and so did Eclipse' refactorings.