# How to name our Unit Tests

## Connection - 10'

Imagine we want to test this method :

```java
public static boolean isLeapYear(int year)
```

* Here are the [associated requirements](https://en.wikipedia.org/wiki/Leap_year)

**How would you name your first test ?**

* Ask attendees to note on a Sticky Note what is the name of their first test
* Compare the different styles
* What do they prefer (Dot voting)

## Concepts - 10'

#### Tests names v1

```java
yearsNotDivisibleBy4...
yearsDivisibleBy4ButNotBy100...
yearsDivisibleBy100ButNotBy400...
yearsNotDivisibleBy400...
```

* Is it readable ?
* What is the intent ?

#### Tests names v2

```java
years_not_divisible_by_4...
years_divisible_by_4_but_not_by_100...
years_divisible_by_100_but_not_by_400...
years_not_divisible_by_400...
```

* Is it more readable ?
* What is the intent ?

#### Tests names v3

```java
years_not_divisible_by_4_are_not_leap_years
years_divisible_by_4_but_not_by_100_are_leap_years
years_divisible_by_100_but_not_by_400_are_not_leap_years
years_not_divisible_by_400_are_not_leap_years
```

* Intent is more clear, isn’t it ?

#### Tests names v4

```java
public class Leap_year_spec {
    public static class A_year_is_a_leap_year {
        @Test public void if_it_is_divisible_by_4_but_not_by_100()...
        @Test public void if_it_is_divisible_by_400()...
    }
    
    public static class A_year_is_not_a_leap_year {
        @Test public void if_it_is_not_divisible_by_4()...
        @Test public void if_it_is_divisible_by_100_but_not_by_400()...
    }
}
```

* Express what the class should be able to do
* Read it as a full sentence : express a true business specification
* You should avoid technical terms

## Concrete Practice - 30'

* Choose a Kata on [Coding Dojo](https://codingdojo.org/kata/)
* Extract the Test Cases you want to write
  * Define the structure and naming of your tests

## Conclusion - 10'

Imagine you use this naming technique during the next 6 months :

* What has changed ?
* Who else have noticed those changes ?
* What are the impacts on your day to day ?

### Resources

* <https://www.youtube.com/watch?v=azoucC_fwzw&ab_channel=BuildStuff>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/testing/how-to-name-our-unit-tests.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
