# Replace JUnit Assumptions with Hamcrest JUnit

# Description

This rule replaces the JUnit 4 assumptions Assume.assumeThat (opens new window), Assume.assumeNoException (opens new window), and Assume.assumeNotNull (opens new window) by the equivalent invocations of Hamcrest JUnit assumption MatcherAssume.assumeThat (opens new window).
Since JUnit 5 contains no equivalent assumption methods, this rule eliminates an obstacle for migration to JUnit 5.

Requirements

This rule requires the following libraries to be available in the project's classpath:

  • org.hamcrest:hamcrest-core:1.3
  • org.hamcrest:hamcrest-junit:1.0.0.0

# Benefits

Helps migrating to JUnit 5 by removing references to JUnit 4 methods.

# Tags

# Code Changes

# Invocation of assumeThat without Message

Pre

import static org.hamcrest.Matchers.equalToIgnoringCase;
import static org.junit.Assume.assumeThat;

import org.junit.jupiter.api.Test;

public class AssumptionExampleTest {
	@Test
	public void test() {
		//...
		assumeThat(value, equalToIgnoringCase("value"));
	}
}

Post

import static org.hamcrest.Matchers.equalToIgnoringCase;
import static org.hamcrest.junit.MatcherAssume.assumeThat;

import org.junit.jupiter.api.Test;

public class AssumptionExampleTest {
	@Test
	public void test() {
		//...
		assumeThat(value, equalToIgnoringCase("value"));
	}
}

# Invocation of assumeThat with Message

Pre

import static org.hamcrest.Matchers.equalToIgnoringCase;
import static org.junit.Assume.assumeThat;

import org.junit.jupiter.api.Test;

public class AssumptionExampleTest {
	@Test
	public void test() {
		//...
		assumeThat("Assuming case insensitive \"value\".", 
			value,
			equalToIgnoringCase("value"));
	}
}

Post

import static org.hamcrest.Matchers.equalToIgnoringCase;
import static org.hamcrest.junit.MatcherAssume.assumeThat;

import org.junit.jupiter.api.Test;

public class AssumptionExampleTest {
	@Test
	public void test() {
		//...
		assumeThat("Assuming case insensitive \"value\".", 
			value,
			equalToIgnoringCase("value"));
	}
}

# Invocation of assumeThat with Qualifier

Pre

import static org.hamcrest.Matchers.equalToIgnoringCase;

import org.hamcrest.Matcher;
import org.junit.Assume;
import org.junit.jupiter.api.Test;

public class AssumptionExampleTest {

	static <T> void assumeThat(T actual, Matcher<T> matcher) {
		//...
	}

	@Test
	public void test() {
		//...
		Assume.assumeThat(value, equalToIgnoringCase("value"));
	}
}

Post

import static org.hamcrest.Matchers.equalToIgnoringCase;

import org.hamcrest.Matcher;
import org.hamcrest.junit.MatcherAssume;
import org.junit.jupiter.api.Test;

public class AssumptionExampleTest {
	static <T> void assumeThat(T actual, Matcher<T> matcher) {
		//...
	}

	@Test
	public void test() {
		//...
		MatcherAssume.assumeThat(value, equalToIgnoringCase("value"));
	}
}

# Invocation of assumeNoException with Message

Pre

import static org.junit.Assume.assumeNoException;

import org.junit.jupiter.api.Test;

public class AssumptionExampleTest {

	@Test
	public void test() {
		//...
		assumeNoException("No exception is thrown.", exception);
	}
}

Post

import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.junit.MatcherAssume.assumeThat;

import org.junit.jupiter.api.Test;

public class AssumptionExampleTest {
	
	@Test
	public void test() {
		//...
		assumeThat("No exception is thrown.", exception, nullValue());
	}
}

# Invocation of assumeNotNull with Multiple Objects

Pre

import static org.junit.Assume.assumeNotNull;

import org.junit.jupiter.api.Test;

public class AssumptionExampleTest {

	@Test
	public void test() {
		//...
		assumeNotNull(o1, o2);
	}
}

Post

import static java.util.Arrays.asList;
import static org.hamcrest.CoreMatchers.everyItem;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.junit.MatcherAssume.assumeThat;

import org.junit.jupiter.api.Test;

public class AssumptionExampleTest {

	@Test
	public void test() {
		//...
		assumeThat(asList(o1, o1), everyItem(notNullValue()));
	}
}

# Invocation of assumeNotNull with Single Object

Pre

import static org.junit.Assume.assumeNotNull;

import org.junit.jupiter.api.Test;

public class AssumptionExampleTest {
	@Test
	public void test() {
		//...
		assumeNotNull(o);
	}
}

Post

import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.junit.MatcherAssume.assumeThat;

import org.junit.jupiter.api.Test;

public class AssumptionExampleTest {

	@Test
	public void test() {
		//...
		assumeThat(o, notNullValue());
	}
}

# Invocation of assumeNotNull with Object Array Variable

Pre

import static org.junit.Assume.assumeNotNull;

import org.junit.jupiter.api.Test;

public class AssumptionExampleTest {
	Object[] objects;

	@Test
	public void test() {
		//...
		assumeNotNull(objects);
	}
}

Post

import static java.util.Arrays.asList;
import static org.hamcrest.CoreMatchers.everyItem;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.junit.MatcherAssume.assumeThat;

import org.junit.jupiter.api.Test;

public class AssumptionExampleTest {
	Object[] objects;

	@Test
	public void test() {
		//...
		assumeThat(objects, notNullValue());
		assumeThat(asList(objects), everyItem(notNullValue()));
		
	}
}

You Want To Have Those Changes Done Automatically?

The automatic application of this rule is supported in the following jSparrow version:

# Properties

Property Value
Rule ID ReplaceJUnit4AssumptionsWithHamcrestJUnit
First seen in jSparrow version 4.0.0
Minimum Java version 5
Remediation cost 2 min