I'm learning TDD but struggling to adopt it as it's not straightforward.
The question I cannot answer is "How to write a test before any of implementation code exists?".
If our target class / target method / target parameter type / target return type don't exist,
Everybody tells WHY but not HOW
I've tried my best to find resources that elaborate on writing tests before production code but, assuming that I missed good resources, most of them are filled with cliches explaining why TTD is important than focusing on practises to adopt it.
An example use-case.
Let's assume that we are developing a software for a University and our use-case is course registration.
To keep it simple, let us confine this discussion to
Pseudocode
ENROLL(studentId, courseId)
//check if student enrolled in less than 3 courses in the same semester as given courseId belongs in.
//if yes, enroll him/her.
//if not, return an error.
The actual implementation of above could span a couple of classes involving services, daos, etc.
Please could you explain how to test-driven-develop it step by step? If you were to implement this using TDD, how'd you do it step-by-step.
I am hoping that this could aid many struggles like me in the future.
Create EnrollingServiceTest class in src/test/java in the same package as EnrollingService
class EnrollingServiceTest {
private EnrollingService enrollingService;
@Before
public void init() {
enrollingService = new EnrollingService();
}
@Test
public void testEnroll() {
boolean result = enrollingService.enroll(1l, 1l);
assertTrue(result);
...
IDE (I am assuming you are using IDE) shows errors - EnrollingService does not exists .
Point cursor on EnrollService - IDE will offer to create a class - let it create in src/main/java
Now IDE says that enroll(long, long) method is missing - let IDE create it for you.
Now IDE shows no errors. Run the test - it fails. Go to enroll and start implementing the logic
And so on...