New 42 day free trial
Smarty

Your Convey needs more focus

Smarty header pin graphic
February 7, 2014
Tags

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
Shipping optimization: Boosting your bottom line
Arrow Icon
Shipping optimization is rapidly evolving the retail landscape with advancements in shipping technology. From using robotics to increase efficiency and protect workers from dangerous jobs to autonomous vehicles and drones taking items to hard-to-reach areas, shipping has drastically evolved from the infancy of ecommerce in the 1990s. Sure, the 90s are currently having a pop culture resurgence, but your customers don’t want their shipping experience to go retro. One of the most impactful ways to ship effectively is to use a Shipping Execution System (SES).
Wildfire risk assessment with Smarty®
Arrow Icon
In the wake of the recent LA fires that scorched over 10,000 homes and displaced thousands of families, the need for precision in disaster preparation, wildfire risk assessment, and emergency response is clear. Wildfire risk assessment processes are full of pain points for insurance carriers and reinsurance carriers alike: specifically considering risk assessment, efficient response times and routes, and even recovery efforts. This is where address location intelligence can support insurance carriers and governmental entity responses.
Inside Smarty® - Irina O'hara
Arrow Icon
Irina O'Hara is one of our uniquely clever, expert frontend developers. She’s immensely talented and has had a vital impact on our website redesign. When it came time to spotlight her, Irina was a joy to sit down with and get to know a little better. To get to the basics, she writes code and creates awesome websites, and she’s darn good at both. BackgroundIrina was born and raised in St. Petersburg, Russia. However, she wasn't born a development expert and had other aspirations from the start.

Ready to get started?