#tdd
The "Test Helper to Production Code" pipeline: one pattern.
Custom assertions become comparison operators become summary values become domain concepts.
Are Mocks Bad? I have to ask, in a @YouTube Short from Tales from the jar side
https://youtube.com/shorts/G0mPA_i97F4?feature=share
#Java #Mockito #TDD #testing
Part 3 of the "Good Software Design" series is up!
#tdd #refactoring #softwaredesign
https://www.agileinstitute.com/articles/good-software-design-part-3-refactoring
In about 40 minutes, @jamesshore and I will continue pairing on test-driving code for our role-playing game that uses OpenAI to generate conversation.
Join us for Episode #5 of "The AI Chronicles" at 1pm PDT (20:00 UTC): https://jitterted.stream
The recording of last week's AI Chronicles episode is up. In this episode: engineering leadership, evolutionary design, pair programming, and integration testing a fetch() wrapper.
https://www.jamesshore.com/v2/projects/nullables/ai-chronicles/4-fetch-quest
Also, we're livestreaming this week's episode today! It's at 1pm Pacific, about 2.5 hours from now, at jitterted.stream.

Enjoy.ing is hiring .NET Core Software Engineer
๐ง #java #csharp #javascript #dotnet #dotnetcore #react #graphql #cypress #aws #azure #docker #gcp #kafka #kubernetes #mongodb #tdd
๐ Serbia
โฐ Full-time
๐ฐ $90k - $210k (Estimate)
๐ข Enjoy.ing
Job details https://jobsfordevelopers.com/jobs/net-core-software-engineer-at-enjoy-ing-jul-19-2022-2af80e?utm_source=mastodon.world&ref=mastodon.world
#jobalert #jobsearch #hiring

Blinq is hiring Senior Software Engineer - Web
๐ง #typescript #firebase #nextjs #react #node #gcp #tdd #seniorengineer
๐ Melbourne, Australia
โฐ Full-time
๐ฐ $90k - $210k (Estimate)
๐ข Blinq
Job details https://jobsfordevelopers.com/jobs/senior-software-engineer-web-at-blinq-me-aug-15-2022-5bb736?utm_source=mastodon.world&ref=mastodon.world
#jobalert #jobsearch #hiring
Cool to see @BenLinders interview with Michal Svoboda on Test-Driven Development in the Cloud - https://www.infoq.com/news/2023/05/test-driven-development-cloud/ as both #InfrastructureAsCode and #TDD practitioners, @westghost and I found this hard to resist for #XP2023, in amsterdam in two weeks :-) https://events.agilealliance.org/xp2023/session/1449914/test-driven-development-of-cloud-apps
This afternoon's livestream of The AI Chronicles is about to start! #pairing #tdd #react #SpringBoot and more. https://www.twitch.tv/jitterted
AI Chronicles #3 is up for your weekend enjoyment. In this episode, we discuss extrinsic vs. intrinsic motivation, how to make code fail faster, and finish implementing an #OpenAI client.
https://www.jamesshore.com/v2/projects/nullables/ai-chronicles/3-fail-faster

Here you have the presentation I shared yesterday at @TechWeekRO related with #TDD
Let me know if you have any questions around it, I will be really happy to try to answer them ๐ #techweekro
https://www.slideshare.net/icougil/tdd-seriously-try-it-bucarest-tech-week
I have noticed a shift in how I talk about the topics in my #tdd training classes.
All things are permitted. Everything is uncertain. Take your fear seriously. When in doubt, optimize for safety.
These attitudes answer (almost?) all questions of the types "Should we do X?" and "When should we do X (instead of Y)?"
My "Testing Without Mocks" training course is coming up in just two weeks, and I still have some discounted seats available. This is the last time this price will be available, and I won't be offering the course again until October at the earliest.
You can sign up here:
Unit tests are NO boilerplate! They are a very important part of engineering correct and maintainable software!
Please get this right!
#ArtificialIntelligence #LLM #LLMs #MSBuild #SoftwareEngineering #SoftwareDevelopment #UnitTest #TDD
Idle thought: Indeed, #tdd isn't magic---it doesn't automatically lead to success as a programmer; it does, however, help make learning a core part of everyday practice, which leads more often to more kinds of success. It makes room for improvement in a profession where we're often told to improve on our own damn time.
Exactly! The hubris necessary to pre-hoc decide, for an arbitrarily complicated piece of custom software, that you ๐ฏ understand all of the constraints and trade-offs is arrogance in the extreme!
This isn't just a reason to strongly consider #tdd but also a huge invitation to re-examine your life choices. Some confidence is useful but hubris is the confidence before the fall.
Are you an actual gremlin? Do you deliberately throw sabots into the machines? Do you like shipping software that breaks in production? No? Then look at ways to challenge your perspectives. #tdd is one such way. There are others. https://mastodon.social/@jbrains/110418334157841431
In the hands of a programmer who has all the experience they need to feel comfortable that they truly need to build it "that way" from the beginning, then they can judge whether a relentlessly incremental approach would help them add that behavior with more confidence or not. I would trust them to choose. I encourage all others to challenge their assumptions until that becomes one of their core habits. #tdd reinforces that core habits.
And there are other ways to do that.
(4/4, fin)
Even in this situation, #tdd gives you a chance to challenge your assumptions:
- we must build it this way eventually
- we must build it this way now
- we can never benefit from building it a different way, such as with lightweight technology
I argue the opposite of the author of that article. Precisely because programmers are accustomed to never challenging these assumptions, #tdd would help remind them to consider alternatives that might help the business.
(3/n)
If you have already decided about the implementation details and are unwilling to change them and are willing to wait until the entire industrial-strength implementation is completed before deploying to production, then you have reduced #tdd to test-first programming.
Maybe this is an argument against the relentlessly incremental style of #tdd, but that's not the only way to do it nor always the best way to do it. Sometimes, we choose some design constraints up front and follow them.
(2/n)
I read an article with this argument against #tdd: Don't force me to build something incrementally in order to discover implementation details that I've already decided on. I could just build it much faster by following my plan.
I agree with the idea and I disagree that this is an argument against #tdd.
(1/n)
EPISODE #3 of THE AI CHRONICLES - LIVE
Join @jamesshore and I as we work on using OpenAI to supply the conversation in our role-playing game.
Today we're parsing responses from OpenAI.
Join us in 1.25 hours https://ted.dev/go/ai-chronicles.
"I often jump into the TDD flow when Iโm adding a new feature to a product or confirming the existence of a bug. If itโs not clear how I should approach the problem, the best way for me to start is with a test. Tests force me to break down the problem into steps to reach an initial solution, while refactoring gets me to a cleaner solution"
โฅ Increment Magazine
#TDD #Testing #SoftwareDevelopment
https://increment.com/testing/the-art-and-craft-of-tdd/
Quick 7 is fully released! Quick 7 introduces a different way to create async tests in a way also lets you create synchronous tests (a la Quick 5 and earlier).
Additionally, Quick 7 will now generate human-readable test selectors! No more mangled "some_thing___in_some_condition___does_a_thing", it's now "some thing, in some condition, does a thing".
Release notes and more at https://github.com/Quick/Quick/releases/tag/v7.0.0
Thanks so much to everyone who has supported me and the rest of the Quick team in getting this out! I really appreciate all the feedback.
I've got my #TDD Game on my mind because I just updated the Print & Play version*. Right now the REFACTOR card was intended to work on the "production code", but I'm now thinking of a rule expansion that takes into account neglecting to refactor your TEST Code.
* Print & Play: https://jitterted.podia.com/print-and-play-version-of-jitterted-s-tdd-game
** Physical Copy: https://tddga.me

@GeePawHill Barrier to delete code has been lowered (as I always want, but also always needs work). Doing yet-another-spike only took two #pomodori, after which - more #QuietConfidence - I understand better how and why this stuff is built, and everything new is a library by default. It's a bit like the 'ratchet' metaphor of #tdd but with skill instead of code. Moving a step up, and then being relaxed in the knowledge, so I don't have to think or worry about it anymore.
I've been an avid user of #TDD for almost 20 years (yikes!). It's hard for me to write code any other way. Unfortunately, most of my coworkers don't understand my way of working and, therefore, don't value it. It has been a very lonely professional journey for me.
Gokiburi version 0.2.0 is now out, with improvements that allow you to examine build errors and timeouts right in the web UI, keeping you within the workflow.


3Pillar Global is hiring Ruby on Rails Technical Lead
๐ง #java #postgresql #rubyonrails #javascript #ruby #react #aws #bdd #css #html #kubernetes #sql #tdd #techlead
๐ Costa Rica
โฐ Full-time
๐ฐ $90k - $210k (Estimate)
๐ข 3Pillar Global
Job details https://jobsfordevelopers.com/jobs/ruby-on-rails-technical-lead-at-3pillar-global-apr-28-2021-abc77d?utm_source=mastodon.world&ref=mastodon.world
#jobalert #jobsearch #hiring
Post-commit #SoftwareTesting was a mistake. If you canโt test your working copy, youโre not doing #TDD
Your #UnitTests are Trying To Tell You Something by Victor Rentea at #DevoxxUK
What are the benefits of TDD? TDD helps to ensure that code is well-tested, reliable and consistent. #TDD #SoftwareArchitecture
https://youtube.com/watch?v=3JymQay0Ic0&feature=share "there is no such thing as #mastery '" . how to suck at anything. on to the next set of tests. #tdd #spike
On today's live coding stream, we actually did inside-out #TDD. We knew what the new UI needed to look like and behave, and so we started with the innermost domain object: the Ensemble.
TDD'd the ability for the Ensemble to know about "Spectators" and then ensure Spectators couldn't also be "Participants".
Then moved on to the EnsembleService, and added a test to ensure that doing `joinAsSpectator` loaded the Ensemble into memory, updated it, and saved it (using an OutputTracker-like mechanism). Did some refactoring while we were there.
Finally moved on to the DTOs that support the UI, faked it a bit and finished the HTML and then went back to finish the DTOs.
Guess who's number 1 on the test-runners Speedlify, for the third year in a row!
It baffles me how easy some people are to dismiss techniques and perspectives that are advocated by developers as "something for developers" and thus not for business or product management:
These are all concepts meant to improve delivering the right product and delivering the product right. Thinking it's merely developers doing their thing outside the realm or concern of product management is so detrimental to both.
The sale continues at PragProg (use code TOOLS2023 for a 50% discount), so I made the thing I made before, but this time I made it better
#Java #Mockito #TDD #testing
https://youtube.com/shorts/ng75A92zhbo?feature=share
Let's discuss your concerns & the various common misperceptions about #TDD; & how it helps #Scrum #SoftwareDevelopment teams rapidly deliver quality product iteratively & incrementally over the long term.
Meetup Hosted by Collaborative Leadership Team
My #nullables and testing without mocks office hours starts in 10 minutes! Zoom link here: https://www.jamesshore.com/v2/calendar/2023-05-10
๐ฃ I finally managed to get a little project I've been working on ready for a โbetaโ release. Introducing:
Gokiburi: Automatic Test Runs for Go Projects
https://github.com/michenriksen/gokiburi
I've used it privately for a while now with no major issues, but bugs should be expected. Give it a try and share your thoughts!




#TDD helps me write correct code. SwiftLint helps me write clear code. โ๏ธ Here's how I like my SwiftLint. https://qualitycoding.org/swiftlint/
Re: Moving #Angular CLI to #Jest and Web Test Runner:
I'm having mixed feeling about this. Deprecating Karma makes sense. Its architecture is 10+ yrs old. But since Facebook handed Jest over to the community, Jest is seriously under-maintained. It has become the proverbial project some random person in Nebraska is thanklessly maintaining.
If the Angular team is serious about this switch, Google should pay someone contributing to Jest.
https://techhub.social/@develwithoutacause/110272255733926133
There's a pattern of Not Invented Here Syndrome when people put a catchy name in things.
But these fundamentals lead directly to #TDD etc.
"The test design should be made at the same time as the design decision."
Tests that have lengthy, tedious, detailed setup sections take a long time to understand, and are prone to subtle errors themselves. (Mostly a problem with Test-After vs. #TDD.)
Speed of understanding is therefore probably more important than speed of writing. That's why I've been more focused on refactoring my tests than I have been in the past.
Ugh. Yet another "mocks are bad, use fakes" post. They're all test doubles and suffer from the same problems. Use what works for you. #tdd
I'm again teaming up with Collaborative Leadership Team to offer another in-person Certified Scrum Developer (CSD) double-feature, in Minneapolis in late July (often the best time of year, weather-wise: not too cold, not too hot).
First, the basic CSD...
https://coleadteam.ticketspice.com/csd-jul-25-26-2023-in-person-with-rob-myers
...followed by the two-day Advanced CSD...
(#Scrum #Developer #training includes #TDD #refactoring #cicd #pairprogramming and various other #agile #engineering practices.)
A few days ago, I released the second #chapter of the #continiousDelivery #bootcamp let's do an intro to #TDD https://youtu.be/MG-Uqve41BQ
Feeling a bit confused by my decision making in @xunit.
This passes:
`Assert.Equal(42, 42L);`
This fails:
`Assert.Equivalent(42, 42L);`
That feels wrong. It's either backward, or both should pass. Equivalent was designed to be the "less strict" version of things, so why did I decide that equal values of different intrinsic types were a failure?
Equal has passed for 15 years. Equivalent is relatively new. I'm leaning towards both passing.
What do you think I should do?
Nullables are a novel approach to testing that allow you to create fast, reliable tests without using mocks (or interfaces). They're a way of "turning off" production code so you can have sociable, state-based tests that don't talk to the outside world.
I'm hosting office hours on May 10th at 9am Pacific / 12pm Eastern / 18:00 CEST for anybody who'd like to discuss these ideas. Bring your code! Details and a calendar reminder are available here: https://www.jamesshore.com/v2/calendar/2023-05-10
Don't miss out on #SoCraTes UK #training day. 10 great trainers, 9 great sessions.
#BDD #TDD #TBD #Kotlin #MobProgramming #EnsembleProgramming #Observability #DateHandling #LegacyCode #CodeReading #Software

What are the worst examples of using #testdoubles #mocks youโve seen? Send me your mocking hell. #testing #tdd
Generating implementation code with AI is one thing...
But generating unit tests with #AI is on a different level. This should actually be illegal!
#ArtificialIntelligence #TDD #UnitTest #LLM #TestDrivenDevelopment #SoftwareEngineering
So I really want to try creating a #WebComponents app but can someone tell me: what are some of your favorite ways to test them?
I just pushed Quick 7 Beta 1 out. This dramatically changes how async tests run (... again...). Honestly, this is the approach I wish I had taken with Quick 6. Much happier with it.
If you're an iOS dev and you use Quick, I'd love to hear your thoughts.
@qcoding fwiw my dream is to use an #AI to do actual #TDD -- I want to get a loop going where the human writes a test, then the AI writes code until it passes (and all prior tests too), then suggests refactorings, then repeat
i am putting this out there because I've had this idea for literally 20 years and any feedback might motivate me to actually spike it this weekend
Denys Poltorak just shared an article on TTD in the "A Philosophy of Software Design" Google Group.
https://herbertograca.com/2018/08/27/distillation-of-tdd-where-did-it-all-go-wrong/
It contains a great reminder that #TDD as it was originally envisioned should in fact already avoid many of its modern pitfalls. There's an amazing list int he article of great principles for designing tests from Ian Cooper.
> In the end, the message is:
> Test module behaviours, not implementations!
Love it.
I just asked #ChatGPT an easy one: write FizzBuzz using #TDD.
It answered with a full implementation of FizzBuzz, and tests.
But that's not TDD. It took repeated coaxing to get it to write a single test. And it didn't know how to write the code to make it fail, or the minimal code to make it pass.
It kept defining TDD correctly, but had no idea how to do it. ChatGPT was trained with what's out there, so this tells me:
- Many people can define TDD
- Very few people understand how to TDD
Pre-orders are now open until April 12th!
Buy JitterTed's TDD Game today and get one of the first copies! (Get a free logo magnet and sticker, too!)