I’m hosting Chris Simon on a #JetBrains#livestream to discuss #TDD, #DDD, and #csharp. Not to be confused with D&D, which is about wizards, dragons, and dungeon masters… wait it's pretty similar.
We just shipped v2 Core Framework 2.8.0, Analyzers 1.13.0, and Visual Studio adapter 2.8.0. The primary purpose of this release is a new parallelism algorithm that should make test timing more reliable, and make thread deadlocks in your tests less likely.
One top misconception about #TDD is that you should refactor the tests as you go. This means that you can delete some too. It’s like building an arch and then knocking out the supporting structure. The supports helped along the way but are no longer needed. It’s not true that “the best code is the code that was never written”. It is true that the best code modification is to delete it. Tests ensure that nothing unexpected happens once you have deleted that code. #programming
There are some really great coders who don’t get #TDD and that’s OK but I wish they would not use that misunderstanding to just proclaim that it is useless. On the other hand we need to find a way to prove the usefulness without just saying that “you are holding it wrong”. #programming
Why? Because 3 separate times, I predicted how the test should fail, and it failed differently! They failed in the unexpected way because I had either written the test setup incorrectly, or misunderstood a library method¹.
Had I just looked out for a failing test, I would have started writing code to make it pass, and been disappointed that it didn't pass when I was done.
--
¹ Turns out Java's String.indent(4) normalizes line endings, meaning it will add a line ending to the last line, even if it didn't have one before! Surprise!
@jitterted I have always thought the circle diagram for #TDD sent the wrong message to new practitioners. Refactoring should always start and end in green. If you refactor and things go red you’ve done something else other than refactoring.
We just shipped v2 Core Framework 2.7.1, Analyzers 1.12.0, and Visual Studio adapter 2.5.8. This includes a few new assertion overloads, four new #Roslyn analyzers (and two new suppressors), and a handful of bug fixes.
If you were thinking of ordering your own copy of JitterTed's TDD Game, I recommend ordering soon, as I'm running low on inventory (and won't get more for another month or so).
Get your copy (or multiple copies—saves on shipping) today at https://tdd.cards
And well … It works good so far. And so many more things now make sense and work, e.g. TDD. I thought TDD doesn't make sense, except for some cases. But now with a different point of view to how to create and structure software … it now works. I could develop the current project fully #TDD.
I hate #daylightsavingstime. I hate it so much. The week where #DST changes occur lets me find the weirdest of higgs-bugson and mandelbugs in #GNOMECalendar while doing #QA.
At least the majority of those issues have already been durably fixed for #GNOME 46 by @danigm's fantastic #TDD (unit-tests-backed) bufixes 😌
I'm taking a small break from live coding, so there will be no stream this Sunday.
But do return on Sunday, March 10. We'll start writing a game using #SwiftUI! What does test-driven development (#TDD) look like in a SwiftUI world?
The chat is lively: you can ask questions and help answer mine. Follow me on Twitch for the go-live notification. https://www.twitch.tv/qcoding
Phew, the second (maybe third) pretty big stand-alone #Python library (first was a script rather) that I wrote at my job within the last 12 months. (Not that common anymore.)
Each took roughly 1 month until v1. Each 1k+ lines of code. This time very #TDD style (the script not so much, because it was a one-off — well, two-off ;)
Yes, sure, #Rust prevents a lot of bugs at compile time already, but not logic bugs.
For example in #CSVDiff we have ~70 unit tests and ~12 integration tests. The only "bug report" we have ever gotten was due to a corrupted CSV file (being mistaken with a bug in diff):
Unit tests are supposed to help you to find bugs. In some situations you need a Test Double, or a Mock object in your test. That can make it harder! Take a look at the Guided Learning Hour that I just published. https://youtu.be/OuRtBe07T9A#softwaredevelopment#tdd
Once again, #TDD and #HexagonalArchitecture meant that when I hooked up the "real" timer broadcaster (using WebSockets), everything just worked.
Only took 35 lines of WebSocket code and 10 lines of #SpringBoot configuration code and a few #htmx attributes on the HTML page. (Not counting the separate transformer code that generated the HTML.)