Pinpoint: A virtual user conference Register today
Smarty

Your Convey needs more focus

Smarty header pin graphic
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
Tariffs are high. Your address accuracy should be higher.
Arrow Icon
Tariffs are spiking. Shipping costs are climbing. Margins are shrinking. You can’t control global trade policy, but you can control how efficient and accurate your operations are in response. Most ecommerce teams, logistics planners, and data managers miss one of their best cost-saving opportunities: addressing accuracy. Bad address data isn’t hidden. It sits in your systems, shows up in carrier returns, and quietly drains profits every day. When tariffs rise to 15 to 50 percent in some product categories and import volumes are falling, every shipment becomes more expensive, every delay costs more, and every lost customer hurts more.
Pinpoint: The Smarty virtual user conference, because the world is better validated
Arrow Icon
November 2025 | 100% online | 100% awesomeJoin us this November for the Smarty Virtual User Conference, a two-day event packed with insights, tools, laughs, and $1000 worth of prizes. This event is for you, whether you’re optimizing delivery accuracy, improving compliance, or just trying to figure out if your neighbor really has a breakfast nook. What to expect:2 days, 12 hours of content, zero fluffLive sessions from address data prosHands-on demos of Smarty’s latest tools and pluginsGiveaways galore, like gift cards, swag, and even a chance at a massive LEGO setHidden Easter eggs throughout the event (no, seriously—find them and win)An after-party with games (shoutout to Brady Amundson)Tailored tracks for every roleFor developers:Roll up your sleeves.
Welcome to the Address Zoo #1 | Override & underride city addresses
Arrow Icon
The benefits of reliable, easy-to-implement address data are straightforward. Actual addresses, on the other hand, aren’t always so cut and dry. If you’re looking to become an expert in everything that begins or ends with an address, this series is for you. We’ll demystify the types of addresses that have developers scratching their heads and introduce you to the tools keeping your address data best-in-class. Come one, come all, and enter the wonderful world of peculiar addresses! Let’s see what’s on exhibit.

Ready to get started?