Webinar
Smarty

Your Convey needs more Focus

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...
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 iconSubscribe Now
Read our recent posts
Standardizing country information: Easier said than done
Arrow Icon
At first glance, standardizing country information seems like a straightforward task. After all, how complicated can it be to manage country codes and names? However, once you start diving into the complexities—multiple users, various languages, diacritics, and more—it becomes clear that this process is far from simple. What if Germany has a different name for France than France does because of language barriers between German and French? (They do. The name “France” in German is “Frankreich,” but “France” in French is “France.
National Smarties® Day
Arrow Icon
Well, whaddya know, it’s that time again: National Smarties® Day! You’re probably thinking, “I honestly can’t believe Smarty®, my favorite address verification company, has its own day celebrated on a national scale. ” And if you’re thinking that, let me congratulate you on your finely tuned instincts—the existence of such a day strains belief. We’re talking about Smarties, the candy, people. You know, those tart, powdery discs that resoundingly answer the question, “What if chalk, but delicious?” Care to learn more about National Smarties Day? You’re in luck—there's plenty to unwrap.
The curse of the wrong address
Arrow Icon
Nestled snugly in Orem, Utah, address experts huddle in a circle to hear the cautionary tale of the curse of the wrong address. The lights dim, and a hush falls among the group as the flashlight beam fractures in two, lighting the sides of an older man’s face. He clears his throat and begins…Just days after Melissa Darnitall’s 17th birthday, a Victorian house went up for sale in the quaint town of Rolling Hills. Being historians by trade and visiting the city every year to experience what her mother called “the classic Halloween experience,” Melissa’s parents jumped to buy the property.