Welcome to AssertJ eclipse plugin documentation !
This plugin will help you to get assertions for your own classes by generating them, it relies internally on assertj-assertion-generator.
The project is hosted on GitHub and would not have been possible without Nicolas Demengel help, Thanks Nicolas !
AssertJ plugin installation
Go to : Help > Install new software > Add...Then set :
- Name to : AssertJ (or whatever you want)
- location to : http://joel-costigliola.github.com/assertj-eclipse-plugin/repository/
If everything is ok, you should be able to select and install AssertJ plugin.
The install takes some times (don't know why ...).
Accept the licence agreement without reading it :) ... restart eclipse and you are done.
How it works
Let's say you want to generate assertions specific to the Person class below :
package example;
public class Player {
private String name;
private int age;
private boolean rookie;
private String[] teams;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public boolean isRookie() {
return rookie;
}
public String[] getTeams() {
return teams;
}
public Player(String name, int age, boolean rookie, String[] teams) {
this.name = name;
this.age = age;
this.rookie = rookie;
this.teams = teams;
}
}
To generate the assertions class corresponding to Player :
right click on Player class > sources > Generate AssertJ Assertions.
Generated assertions
The generated assertions class (PlayerAssert) has been created in the same package but in test source directory (default being 'src/test/java/'). You can define another test source directory in plugin preferences : Window > Preferences > AssertJ Assertions.
The assertion generator will provide assertions for each property, here's an example of PlayerAssert usage :
String[] teams = {"Cleveland", "Miami"};
Player player = new Player("Lebron James", 28, false, teams);
// you can make a static import if you don't want to see PlayerAssert.
PlayerAssert.assertThat(player).hasAge(28).hasName("Lebron James").hasTeams("Miami");
The generated assertion class is just a quick start for you to have custom assertions, you should complete it with richer assertions to suit your needs !
Note that the generated assertions code relies on AssertJ core 1.0.0 which should be on your classpath.
What you could do now, is to provide a single entry point for all assertions : AssertJ ones and yours. It is easy, inherit from Assertions and add assertThat methods for your own types, see the example below or this one taken from assertj-examples project :
package example;
import org.assertj.core.api.Assertions;
/**
* A single entry point for all assertions, AssertJ standard assertions and MyProject custom assertions.
* With MyProjectAssertions.assertThat static import, you will access all possible assertions (standard and custom ones)
*/
public class MyProjectAssertions extends Assertions { // extending make all standard AssertJ assertions available.
// add an entry point for Player assertions
public static PlayerAssert assertThat(Player actual) {
return new PlayerAssert(actual);
}
}
Complete PlayerAssert class source :
package example;
import static java.lang.String.format;
import org.fest.assertions.api.AbstractAssert;
import org.fest.assertions.api.Assertions;
/**
* {@link Player} specific assertions - Generated by CustomAssertionGenerator.
*/
public class PlayerAssert extends AbstractAssert {
/**
* Creates a new {@link PlayerAssert} to make assertions on actual Player.
* @param actual the Player we want to make assertions on.
*/
public PlayerAssert(Player actual) {
super(actual, PlayerAssert.class);
}
/**
* An entry point for PlayerAssert to follow AssertJ standard assertThat() statements.
* With a static import, one's can write directly : assertThat(myPlayer) and get specific assertion with code completion.
* @param actual the Player we want to make assertions on.
* @return a new {@link PlayerAssert}
*/
public static PlayerAssert assertThat(Player actual) {
return new PlayerAssert(actual);
}
/**
* Verifies that the actual Player's age is equal to the given one.
* @param age the given age to compare the actual Player's age to.
* @return this assertion object.
* @throws AssertionError - if the actual Player's age is not equal to the given one.
*/
public PlayerAssert hasAge(int age) {
// check that actual Player we want to make assertions on is not null.
isNotNull();
// we overrides the default error message with a more explicit one
String errorMessage = format("Expected Player's age to be <%s> but was <%s>", age, actual.getAge());
// check
if (actual.getAge() != age) { throw new AssertionError(errorMessage); }
// return the current assertion for method chaining
return this;
}
/**
* Verifies that the actual Player's name is equal to the given one.
* @param name the given name to compare the actual Player's name to.
* @return this assertion object.
* @throws AssertionError - if the actual Player's name is not equal to the given one.
*/
public PlayerAssert hasName(String name) {
// check that actual Player we want to make assertions on is not null.
isNotNull();
// we overrides the default error message with a more explicit one
String errorMessage = format("Expected Player's name to be <%s> but was <%s>", name, actual.getName());
// check
if (!actual.getName().equals(name)) { throw new AssertionError(errorMessage); }
// return the current assertion for method chaining
return this;
}
/**
* Verifies that the actual Player is rookie.
* @return this assertion object.
* @throws AssertionError - if the actual Player is not rookie.
*/
public PlayerAssert isRookie() {
// check that actual Player we want to make assertions on is not null.
isNotNull();
// we overrides the default error message with a more explicit one
String errorMessage = format("Expected actual Player to be rookie but was not.", actual);
// check
if (!actual.isRookie()) throw new AssertionError(errorMessage);
// return the current assertion for method chaining
return this;
}
/**
* Verifies that the actual Player's teams contains the given String elements.
* @param teams the given elements that should be contained in actual Player's teams.
* @return this assertion object.
* @throws AssertionError if the actual Player's teams does not contain all given String elements.
*/
public PlayerAssert hasTeams(String... teams) {
// check that actual Player we want to make assertions on is not null.
isNotNull();
// check that given String varargs is not null.
if (teams == null) throw new AssertionError("Expecting teams parameter not to be null.");
// check with standard error message (see commented below to set your own message).
Assertions.assertThat(actual.getTeams()).contains(teams);
// uncomment the 4 lines below if you want to build your own error message :
// WritableAssertionInfo assertionInfo = new WritableAssertionInfo();
// String errorMessage = "my error message";
// assertionInfo.overridingErrorMessage(errorMessage);
// Iterables.instance().assertContains(assertionInfo, actual.getTeamMates(), teamMates);
// return the current assertion for method chaining
return this;
}
/**
* Verifies that the actual Player has no teams.
* @return this assertion object.
* @throws AssertionError if the actual Player's teams is not empty.
*/
public PlayerAssert hasNoTeams() {
// check that actual Player we want to make assertions on is not null.
isNotNull();
// we overrides the default error message with a more explicit one
String errorMessage = format("Expected actual <%s> not to have teams but had :\\n%s", actual, actual.getTeams());
// check
if (actual.getTeams().length > 0) throw new AssertionError(errorMessage);
// return the current assertion for method chaining
return this;
}
}