don't even get me started on the "basic editor" versus IDE war; that's a topic that 100% of the time grinds my gears
From that point of view, a developer has what they need to move forward with TDD (or any other process of their choosing).
I write my JVM tests mostly using Spock[1] as it's absolutely great at letting me specify, and ecouraging me to do so, as much context as I can.
It may look something like this (this example is loosely based on Spock using Geb[2]):
@Narrative('''
Users can choose to authenticate using method A or B.
This test makes sure that users can choose one or the other, go back and
change their decision later, and complete the procedure with either method.
''')
class AuthenticationMethodsSpec extends Specification {
def 'Users can choose method A'() {
given: 'the user goes to the login page'
goTo(LoginPage)
when: 'the user chooses method A'
page.click('methodA')
then: 'the user goes to the method A login page'
at LoginMethodA
}
Error messages are great too... and the tests, at least when written as above, with actual contextual information everywhere necessary, are much better than the usual JUnit abominations you're likely to find in Java shops.It may look superficially similar to Cucumber, but it's IMO much better because it's just Groovy code (and I happen to really like Groovy, some people have trouble with it because it's "not exactly like Java"), no custom parsing of text-based stuff and other complex gimmicks.
I dunno why the TDD folks specifically get so zealot-y about it being the one-True Way™. I'm happy that they've found something that they like and are passionate about, but, damn... it seems like they missed the episode of Power Rangers where you learn that different people will like different things than you do, and that that's okay. They don't have to be "wrong" for you to still enjoy your TDD.
I do like beautiful punch card layouts, too. But I'd still not hire someone who uses punch cards to write java. If one cannot configure the "basic editor" to provide basic semantic tools IDEs had for 20 years, then I don't care much about opinions on readability...
In contrast, a developer writing code with a plain editor needs to remember everything and when that becomes difficult, the developer will be forced to either simplify things or encapsulate the complexity so they can forget about it. That code base will be easier to read without tooling because it was built to be understood that way. The developer also has to write each bit by hand, which gives time and motivation to wonder whether what they are writing is necessary.
I could make a similar argument in the other direction as well. Code written by hand tends not to get refactored as much, tends to use too short variable names because of typing laziness, or inappropriate names because renaming variables is not trivial as it is in an IDE. I see the advantages of both, and I find myself preferring the sweet spot of intelligent editors that stop short of knowing everything about your code base.