First of all, we can extract the current TestCase
implementation into an interface:
type Test interface {
Test(t *testing.T, ctx *TestingContext)
}
then, we can define a few different interfaces that a test can implement to provide additional information that can be used to determine if a test should be executed: