Skip to main content

Behavior Driven Test Cases

I have read a bit on BDD. But none of the theory seemed appealing enough that I would be like “hai ! this is cool. Let’s do this”.
Probably because I am a lazy tester or more appropriately test case writer (unit test that is J).

What supposed to happen ?
TDD. Write test cases first àdrive the development from there ( based on whatever model is chosen or appropriate).

What actually happens ?
As much as the next guy wants to throw theory and technical jargons I’m not really sure how many mid-scale project processes actually follow TDD throughout the entire development phase, let alone maintenance phase(where it’s most important) OR BDD for that matter.

What I do mostly?
The truth is (at least if I speak for myself) I have not followed through a proper TDD process. Yes there always exist some test cases that are written and thrown into build process so that we can use it in future.
Even more sometimes we write the test cases after the feature is developed.
But I don’t think that’s TDD.

My reasons for why I am reluctant ( sort of ):
  • Writing test cases is difficult (in terms of extra work).
Usually the attitude is like “I have written the feature and I have executed the code over and over until I got it working. So it’s tested”. Which is fine.

But what about when we change / develop some related feature and want to make sure whether our previously developed feature is still working fine ?

Or the other guy did not break things collectively ?

Yeah! Manually testing it over and over is lame ( even though I do it pretty much on a daily/regular basis ).!

  • Maintaining test cases is even more difficult.
For example: we started making a horse as our feature. And is done and tested. Then client said they want an unicorn. But along the way of putting the “horn” and “wings” on the “horse” resulted in changing the some basic anatomy about the “horse” like “it can freaking fly now”. So our old test cases will fail (well at least mostly). And I wouldn’t want to write or modify them is again (or at least will feel like my hands are heavy).

The cool things:
The theory of “BDD” and “BDD vs TDD” confused me big time. And of course them cowboys put their opinions the way they found it good (which obviously is conflicting).
But the cool thing I have found is a tool called cucumber (https://cucumber.io/). Cucumber is awesome.
AND using cucumber to write test cases will fit in just fine with my laziness to write test cases. I have made peace with myself that I am not going to do BDD or TDD but I will write test cases.

The benefits:
From now on I will focus on test cases written using cucumber (thus somewhat bdd).
Lets take the example of “the client is turning the horse into an unicorn”.
So the behaviour of the horse was:
  • It could run
  • It would eat
Making it an unicorn will not change its behaviour rather will add another:
  • It will fly
So we will only have to write 1 more test method to test flight. And as it is “test case written in cucumber which focuses on behaviour” we won’t have to refactor our test methods because we refactored our code.

The other cool things are:
  • I can literally copy-paste user stories to write my test cases ( because cucumber is awesome)
  • It’s English language. That means I can read through the test cases and understand what one is trying to test (even though my only skill is writng emails)
  • Test method are variable driven (thanks to cucumber).
Thus I can avoid writing bunch of Mocks which can and usually does become absolutely useless at later point.
Hence, I am avoiding “hard coding” things.
  • The “test results” are descriptive so it can be used ( as DFO ) as output of tests for clients.
 Ofcourse the solution needs to be designed properly. Otherwise it’s a lost cause anyway.

 Example:

This is how my “service” test cases looks like:

  • So when I refactored my service layer to use “comman pattern” I did not have to rewrite any of my test cases at all.
  • This is also replacing Mock object.
  • As my “Test” project contains its own config and because I am using “code first” I can create/update or change datasourse ( here in actual application I am using SQL Server but for test I am using “local storage”).
 This is the “test results” look like:


In summary I can be lazy and still write test cases so that I can keep using them in maintenance phase possibly without writing anything on test method.

This is the pattern I followed ( but it’s a little bit weird as Read part is also in same the repo as the write .. but this example project was simple enough)

Comments

Popular posts from this blog

Passwordless Auth to Azure Key Vault using External Secret and Workload Identity

I want to fetch my secrets from Azure KV and I don't want to use any password for it. Let's see how this can be implemented. This is yet another blog post (YABP) about ESO and Azure Workload Identity. Why Passwordless Auth: It is a common practice to use some sort of "master password" (spn clienid, clientsecret etc) to access Secret Vaults (in this case it is AZ KV) but that master password becomes a headache to manage (rotate, prevent leak etc). So, the passwordless auth to AKV is ideal.  Why ESO: This is discussed and addressed in the conclusion section. Workload Identity (Passwordless Auth): Lets make a backward start (just for a change). I will try to explain how the passwordless auth will work. This will make more sense when you will read through the detailed implementation section. Here's a sequence diagram to explain it: There's no magic here. This is a well documented process by microsoft  here . The below diagram (directly copied from the official doc...

The story of a Hack Job

"So, you have hacked it" -- Few days ago one of the guys at work passed me this comment on a random discussion about something I built. I paused for a moment and pondered: Do I reply defending how that's not a hack. OR Do I just not bother I picked the second option for 2 reasons: It was late. It probably isn't worth defending the "hack vs" topic as the comment passed was out of context. So I chose the next best action and replied "Yep, sure did and it is working great.". I felt like Batman in the moment. In this post I will rant about the knowledge gap around hacking and then describe about one of the components of my home automation project (really, this is the main reason for this post) and use that as an example how hacking is cool and does not always mean bad. But first lets align on my definition of hacking: People use this term in good and bad, both ways. For example: "He/she did a hack job" -- Yeah, that probably...

Managing devices using Edge Manager

Managing edge devices has been a complex process as traditional IT ops tools fall short in distributed, low-connectivity environment to manage huge quantity of devices.  Red Hat Edge Manager  (Open source project: FlightControl , GA'd by Red Hat on late Jan, 2026) solves these challenges by providing streamlined management of edge devices and applications through a declarative approach . Now, there's a fair bit to unpack here. But for simplicity this is how I am going to map those 3 things here: Management of edge devices: I am mapping this to LCM (including upgrade, patch etc) of the underlying OS (in this case RHEL OS of BootC flavor or at least UBI based RHEL ). Managing applications: Mapping this to deploying applications and LCM of the applications stack on the OS. Declarative approach: This one is super interesting. To me this is very K8s-yy but in the world of edge devices running linux (RHEL OS, as of today). And then this thing also has MCP : This is my next prob...

Jenkins on k8s - can it be this easy?

 As developers or devops we have had a somewhat love and hate relationship with Jenkins like "love oss based ci/cd that can be hosted on any environment with ranges of community plugins for pretty much anything" BUT "hate messy UI, lack of documentations, difficult to configure" etc etc. But this post isn't about pros and cons of Jenkins, rather it is about how you can get Jenkins on your k8s super quick and easy (using Merlin). Git Repo:  https://github.com/alinahid477/jenkinsonk8s Table of contents: Why Jenkins Why Merlin for Jenkins What is Merlin for Jenkins How Merlin for Jenkins works How Jenkins on k8s work Some anticipated FAQs Why Jenkins Jenkins remains a popular choice when it comes to CICD solution with a massive community of users and contributors (despite the fact there are new cool kids in block like Tekton etc). The way I see it (because of our love and hate relationship with it) "Jenkins is not CICD tool that you want it's the CICD t...

Smart wifi controlled irrigation system using Sonoff and Home Assistant on Raspberry Pi - Part 1

If you have a backyard just for the sake of having one or it came with the house and you hate watering your garden or lawn/backyard then you have come to the right place. I genuinely believe that it is a waste of my valuable time. I would rather watch bachelorette on TV than go outside, turn on tap, hold garden hose in hand to water. Too much work!! Luckily, we have things like sprinkler system, soaker etc which makes things a bit easy. But you still have to get off that comfy couch and turn on tap (then turn off if there's no tap timer in place). ** Skip to the youtube video part if reading is not your thing   When I first moved into my house at first it was exciting to get a backyard (decent size), but soon that turned on annoyance when it came down maintaining it, specially the watering part. I laid bunch sprinklers and soaker through out the yard and bought tap timer but I still needed to routinely turn on the tap timer. Eventually few days ago I had enough of this rub...

Do you even Kubernetes ? - in private cloud

Kubernetes (“koo-burr-NET-eez”) /κυβερνήτης/ - Can be used as noun or verb. Noun "helmsman" or "pilot" or "Orchestrator". We use Kubernetes to achieve resiliency for our application. Verb Perform the act of doing Kubernetes. When done using TKG it is easy but can be super hard if the right tool is not used. Do you even Kubernetes? If I were to survey about how many people in IT industry (regardless of role) knows or at least heard about Kubernetes I would be very surprised if the percentage came out any less than at least 80%. I am curious though, How many people have actually deployed on Kubernetes? How many people have created a Kubernetes cluster? How? The answer could go either way of "Yeah, it's easy" OR "Dude!! it's hard". This is because, in my opinion, it all depends on choosing the right toolset that are fit for purpose. In this post I will create a Kubernetes cluster and deploy a microservice application End-To-End, th...