Skip to main content

autoparams-lombok

autoparams-lombok is an extension for the AutoParams library that makes it easier to work with Project Lombok, a library that reduces boilerplate code in Java applications.

Install

Maven

For Maven, you can add the following dependency to your pom.xml:

<dependency>
<groupId>io.github.autoparams</groupId>
<artifactId>autoparams-lombok</artifactId>
<version>8.3.0</version>
</dependency>

Gradle

For Gradle, use:

testImplementation 'io.github.autoparams:autoparams-lombok:8.3.0'

BuilderCustomizer

When working with @Builder annotation, you can use the BuilderCustomizer to facilitate generating arbitrary objects for your tests. Here's an example:

Suppose you have a User class like so:

import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class User {
private Long id;
private String name;
private String email;
}

You can use BuilderCustomizer to create objects of type User for your tests:

@ParameterizedTest
@AutoSource
@Customization(BuilderCustomizer.class)
void testMethod(User user) {
assertThat(arg.getId()).isNotNull();
assertThat(arg.getName()).isNotNull();
assertThat(arg.getEmail()).isNotNull();
}

Custom Method Names

If you've customized the builder method names using builderMethodName and buildMethodName in your Lombok @Builder, you'll need to create a subclass of BuilderCustomizer to handle the custom names:

import lombok.Builder;
import lombok.Getter;

@Builder(builderMethodName = "getBuilder", buildMethodName = "createUser")
@Getter
public class User {
private Long id;
private String name;
private String email;
}

Here's how you can extend BuilderCustomizer:

public class UserBuilderCustomizer extends BuilderCustomizer {

public UserBuilderCustomizer() {
super("getBuilder", "createUser");
}
}

Now, you can use your customized UserBuilderCustomizer in your tests:

@ParameterizedTest
@AutoSource
@Customization(UserBuilderCustomizer.class)
void testMethod(User user) {
assertThat(arg.getId()).isNotNull();
assertThat(arg.getName()).isNotNull();
assertThat(arg.getEmail()).isNotNull();
}

This allows you to keep the benefits of using @Builder annotation while gaining the automatic generation capabilities provided by AutoParams.