Recently I’ve started on the Java track over at Exercism. As practically a complete beginner to Java, I am still finding my way around the tooling, and in particular, IntelliJ IDE. As part of the Annalyn’s Infiltration exercise I was provided with 30 failing jUnit tests, where each of the tests is tagged like so:
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;
public class AnnalynsInfiltrationTest {
@Test
@Tag("task:1")
@DisplayName("The canFastAttack method returns false when knight is awake")
public void cannot_execute_fast_attack_if_knight_is_awake() {
boolean knightIsAwake = true;
assertThat(AnnalynsInfiltration.canFastAttack(knightIsAwake)).isFalse();
}
@Test
@Tag("task:1")
@DisplayName("The canFastAttack method returns true when knight is sleeping")
public void can_execute_fast_attack_if_knight_is_sleeping() {
boolean knightIsAwake = false;
assertThat(AnnalynsInfiltration.canFastAttack(knightIsAwake)).isTrue();
}
@Test
@Tag("task:2")
@DisplayName("The canSpy method returns false when everyone is sleeping")
public void cannot_spy_if_everyone_is_sleeping() {
boolean knightIsAwake = false;
boolean archerIsAwake = false;
boolean prisonerIsAwake = false;
assertThat(AnnalynsInfiltration.canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake)).isFalse();
}
Code language: Java (java)
Notice how each test is annotated with, amongst other things, a tag like @Tag("task:1")
.
For the first few tests I was alright. I could either run one at a time by clicking the little green ‘play’ icon next to each test, which I did early on in the exercise:
And then as I progressed I decided I wanted to run all of them and see how I was getting on.
That is easy also, just click the green play icon on line 7 – for public class AnnalynsInfiltrationTest {
:
But here in lies the problem.
With 30 tests, I could either only see some of them, or I could drag the Run section up and see all of them, but then lose two thirds of my IDE code editor window.
As I really knew the first three tasks in the exercise were all passing their respective jUnit tests, and I wasn’t going to modifying that code, it seemed to make logical sense to me to only run the tests tagged with @Tag("task:4")
:
But how the heck to do this from the IDE?
Well, fortunately for you, I will share how to do this. As for a Java newb like myself, this was not particularly obvious at all.
Create A jUnit Run Configuration in IntelliJ IDE
The ‘secret’ is to create a new Run configuration from inside IntelliJ IDE.
At the top of your IDE you should see a little bar with the build, play, debug, and other icons.
Click the drop down box that has the name of your file (may be something else for you, not sure) in it.
Then click ‘Edit Configurations…‘:
This should pop up a new box with your current run configurations in there.
Yours may be different, I have been heavily meddling with mine:
From here, click the +
sign in the top left corner.
You need to select ‘JUnit‘ from this menu:
Then fill in the box as follows:
You can name this configuration anything you like.
I went with : Tags (task:1)
Most of this was filled in for me.
The only thing I needed to change was the drop down box in the ‘Build and run‘ section from ‘Class‘ to ‘Tags‘:
I selected:
Tags
and added the tag of task:1
to exactly match one of the named tags in my current file.
This should not be file specific. If I had other test files in the project with that tag, this run config should match those also.
Then click ‘Apply‘ and ‘OK‘ to save and close the setup.
Now you can run this particular config by clicking the play icon at the top once more:
So now I get only the tests that match @Tag("task:1")
:
Pretty neat.
It would be super nice to have a more elegant solution to this problem. Maybe one exists, I’m not sure.
As it stands, this feels like a fair few steps on a short lived project like an Exercism exercise, but I guess it has far more value in a real world project.
Handy to know, anyway.