Pinpoint: A virtual user conference
Smarty

Your Convey needs more focus

February 7, 2014
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.
rss feed icon
Subscribe Now
Read our recent posts
BREAKING: Rooftop geocodes walk off the job—chaos mounting by the hour
Arrow Icon
Dateline: Tuesday, 8:04 a. m. In what experts are calling “the biggest location intelligence crisis since the discovery of space,” rooftop-accurate geocodes have officially gone on strike. The high-precision coordinates—normally pinpointing locations down to the exact rooftop for deliveries, telecom installs, insurance claims, and analytics—appeared on Smarty TV and issued a short but cutting statement this morning:“We’re tired of being taken for granted. We’re tired of being treated like just another number.
Get the most out of US Address Verification: Are you using the 55 points of metadata?
Arrow Icon
If you’re using Smarty’s US Address Verification, you're already sitting on a treasure trove of up to 55 points of metadata, already included in every response. Sure, it cleans and standardizes your addresses like a pro, but that’s just the beginning. Without any upcharges, you can use metadata to make your systems smarter, streamline your operations, and sharpen your marketing and business decisions. Whether you're focused on fraud prevention, operational efficiency, compliance, logistics, or customer experience, Smarty’s metadata delivers powerful insights to your tech stack that will help you rise above your competitors.
Smarty announces virtual user conference: Save the date for Pinpoint, by Smarty
Arrow Icon
OREM, UT, August 18, 2025—Smarty®, the leader in address data intelligence, is inviting developers, data decision-makers, and certified address nerds to join our first-ever 2-day virtual user conference: Pinpoint. This interactive online event will begin on November 11, 2025, and bring together a verifiably fun mix of industry experts, technical deep dives, and business-boosting insights. Participants will walk away with a better understanding of how address validation, geocoding, data enrichment, and autocomplete can solve their toughest data challenges—and maybe even score some sweet prizes while they’re at it.

Ready to get started?