This is a utility for simplifying the writing of tests.
To use this tools, you need to add the next repository:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
and dependency:
<dependency>
<groupId>com.github.antkorwin</groupId>
<artifactId>common-utils</artifactId>
<version>0.71</version>
</dependency>
Guard helps you, when you need to check a some boolean condition and expect a throws Exception if condition is false.
Guard.check( 02 + 010 != 12, CruelJavaWorldException.class, "ooops");
Guard.check( object != null, WrongArgumentException.class, "Object must be not null");
You can use this tool while writing a test, to make tests for a checking throw of the exception more readable.
@Test
public void guardWithoutErrorInfo() {
GuardCheck.check(() -> { throw new IndexOutOfBoundsException(); },
IndexOutOfBoundsException.class);
}
@Test
public void testGuardCheck() {
GuardCheck.check(() -> {
throw new NotFoundException(TestErrorInfo.TEST_ERROR);
},
NotFoundException.class,
TestErrorInfo.TEST_ERROR);
}
You can use it with an ErrorInfo to accumulate all you domain specific exceptions in an one enum-file:
@ErrorInfoUnique
public enum TestErrorInfo implements ErrorInfo {
TEST_ERROR("error"),
TEST_ERROR_ARG("wrong arg");
private static final int BASE = 1000;
private final String msg;
TestErrorInfo(String msg) {
this.msg = msg;
}
@Override
public String getMessage() {
return this.msg;
}
@Override
public Integer getCode() {
return BASE + ordinal();
}
}
and sample of a test case :
Guard.check(a != b, TestErrorInfo.TEST_ERROR);
In order to ensure the uniqueness of codes in a whole project, you can use enums which implements an ErrorInfo interface.
@Test
public void assertInPackage() {
// Act & assert
ErrorInfoCollisionDetector.assertInPackage("com.demo.project");
}
You can use this tool to run the garbage collector and finalize unused memory in your junit tests.
@Test
public void testWeakAfterGC() {
// Arrange
String instance = new String("123");
WeakReference<String> ref = new WeakReference<>(instance);
// Act
instance = null;
GcUtils.fullFinalization();
// Asserts
Assertions.assertThat(ref.get()).isNull();
}
You can check a memory leak in your code for a particular object.
@Test
public void testWithLeak() {
// Arrange
Foo foo = new Foo();
Foo bar = foo;
LeakDetector leakDetector = new LeakDetector(foo);
// Act
foo = null;
// Asserts
leakDetector.assertMemoryLeaksExist();
}