New 42-day free trial Get it now
Smarty

Your Convey needs more focus

Smarty header pin graphic
Updated July 2, 2025
Tags
Smarty header pin graphic

One of the great benefits of TDD/BDD is that you usually don't have to spend much, if any time at all in a debugger. To enter a debugger is to admit a loss of control over the system under test. Even so, there are times when you do need to debug something, even if you're maintaining the discipline.

Lately, most of my coding is in GoLang. Coming from using an IDE almost exclusively to write Python (using PyCharm) and C# (using VS and ReSharper), and knowing how great the visual debugging tools are it's hard to fathom using a console-based debugger for GoLang code. Yes, I know about godbg, which is an amazing tool, but I would rather stay in my test runner of choice, which is GoConvey.

Up until now I would do something like this to achieve debugging:

  • Add log.Println statements where the bugs are
  • Use SkipConvey to limit execution to the test in question (this can get tedious if the test suite is large)
  • Run the tests and observe the output

Or...

  • Add the logging statements
  • Use an init function in the test code to substitute a nil writer to the logger
  • Substitute stdout in the Convey scope that executes the code with logging
  • run the tests and observe the output

Yuck.

Now, there's a better way. It still means putting in some logging, which may or may not be temporary. But, all you have to do now is something like this:

FocusConvey("Subject: Integer incrementation and decrementation", t, func() {
	var x int

	FocusConvey("Given a starting integer value", func() {
		x = 42

		FocusConvey("When incremented", func() {
			x++

			Convey("The value should be greater by one", func() {
				So(x, ShouldEqual, 43)
			})
			FocusConvey("The value should NOT be what it used to be", func() {
				So(x, ShouldNotEqual, 42)
			})
		})
		Convey("When decremented", func() {
			x--

			Convey("The value should be lesser by one", func() {
				So(x, ShouldEqual, 41)
			})
			Convey("The value should NOT be what it used to be", func() {
				So(x, ShouldNotEqual, 42)
			})
		})
		Reset(func() {
			x = 0
		})
	})
})

In this code, only those scopes declared with FocusConvey will be executed, the reset will be ignored. Much easier to toggle for debugging purposes.

Of course, you shouldn't leave the test suite with a bunch of FocusConvey calls lying around. After you fix your code get rid of the Focus and just keep Convey.

Happy debugging!

Subscribe to our blog!
Learn more about RSS feeds here.
Read our recent posts
Smarty customers avoid USPS rate limiting
Arrow Icon
TLDR: Smarty customers won’t feel a thing from the new USPS API restrictions because Smarty doesn’t depend on USPS’s real-time APIs to do address verification. We’ve always used our own, powerful, hyper-accurate data to back our tools and support client needs. While USPS is capping its address verification service at 60 requests per hour and retiring the legacy Web Tools API on January 25, Smarty keeps verifying addresses at full speed on our own infrastructure. We ingest USPS data updates monthly and run verification internally, so USPS API changes, rate limits, or even a temporary USPS outage don’t ripple into your workflows.
Provider data accuracy: Regulatory compliance and hidden network risks
Arrow Icon
Welcome to part one of our new blog series on provider location data—an exploration into the messy, high-stakes world of healthcare compliance, address accuracy, and network adequacy. To kick things off, we sat down with Dave Medlock, founder of Maven One Health and a contributing thought leader, to discuss why clean provider data is essential for achieving peak regulatory compliance and meeting requirements with ease, thereby avoiding serious consequences if it isn’t done correctly. Here’s what he had to say about understanding CMS, state DOIs, continuous audits, rosters, data decay, messy inputs, and the future of address data itself.
Always on; always Smarty: High availability design and engineering best practices
Arrow Icon
When the digital world falters, our goal is simple: stay steady for our customers. At Smarty, reliability isn’t a bragging point, but rather a promise. We’ve built a platform designed to keep running even when others stop, using a vendor-agnostic, redundant infrastructure grounded in engineering best practices that weather disruptions with quiet consistency. Our customers depend on uninterrupted address data services. And, we take that trust seriously. And because we trust you, we’re offering a 42-day free trial on every product.

Ready to get started?