Your Convey needs more Focus

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.
Subscribe Now
Read our recent posts
Understanding the Key Players in Data Governance: Roles and Responsibilities
Arrow Icon
Successful data governance requires more than just rules and policies. It requires a dedicated team of professionals with clear roles and responsibilities to effectively manage and protect the data. We recently published “Data Governance: An Executive’s Survival Guide”, an ebook that you can download right now. In it you’ll find information on data governance and other important factors in the address data game. The following is an excerpt on the section about the different roles and responsibilities involved in data governance.
Data Quality: The Foundation of Successful Data Management
Arrow Icon
We recently published an ebook titled “Data Governance: An Executive’s Survival Guide”. The following is a sampling of the chapter on data quality. The Value of Data Quality Data is the lifeblood of modern organizations, providing crucial insights that can drive decision-making and innovation. However, the value of data is only as good as its quality. Poor quality data can lead to costly mistakes, misinformed decisions, and reputational damage. That's why it's essential to ensure your organization's data fits its intended purpose.
The Importance of a Data Governance Framework
Arrow Icon
We're thrilled to share a sneak peek of one of the sections in our latest ebook, "Data Governance: An Executive's Survival Guide. " This guide is a must-have for anyone with a database, and we have packed it with an abundance of critical points and examples that will enlighten and entertain you. But wait, there's more! If you want to delve deeper into the world of data governance, you can download the full ebook for free. Trust us, it's chock-full of information that will make you the talk of the town (or at least the talk of your office).

The leader in location data intelligence

Ready to get started?