60 lines
1.8 KiB
Plaintext
60 lines
1.8 KiB
Plaintext
It is very easy to write incomplete assertions when using some test frameworks. This rule enforces complete assertions in the following cases:
|
|
|
|
* Fest: ``++assertThat++`` is not followed by an assertion invocation
|
|
* AssertJ: ``++assertThat++`` is not followed by an assertion invocation
|
|
* Mockito: ``++verify++`` is not followed by a method invocation
|
|
* Truth: ``++assertXXX++`` is not followed by an assertion invocation
|
|
|
|
In such cases, what is intended to be a test doesn't actually verify anything
|
|
|
|
== Noncompliant Code Example
|
|
|
|
----
|
|
// Fest
|
|
boolean result = performAction();
|
|
// let's now check that result value is true
|
|
assertThat(result); // Noncompliant; nothing is actually checked, the test passes whether "result" is true or false
|
|
|
|
// Mockito
|
|
List mockedList = Mockito.mock(List.class);
|
|
mockedList.add("one");
|
|
mockedList.clear();
|
|
// let's check that "add" and "clear" methods are actually called
|
|
Mockito.verify(mockedList); // Noncompliant; nothing is checked here, oups no call is chained to verify()
|
|
----
|
|
|
|
== Compliant Solution
|
|
|
|
----
|
|
// Fest
|
|
boolean result = performAction();
|
|
// let's now check that result value is true
|
|
assertThat(result).isTrue();
|
|
|
|
// Mockito
|
|
List mockedList = Mockito.mock(List.class);
|
|
mockedList.add("one");
|
|
mockedList.clear();
|
|
// let's check that "add" and "clear" methods are actually called
|
|
Mockito.verify(mockedList).add("one");
|
|
Mockito.verify(mockedList).clear();
|
|
----
|
|
|
|
== Exceptions
|
|
|
|
Variable assignments and return statements are skipped to allow helper methods.
|
|
|
|
----
|
|
private BooleanAssert check(String filename, String key) {
|
|
String fileContent = readFileContent(filename);
|
|
performReplacements(fileContent);
|
|
return assertThat(fileContent.contains(key)); // No issue is raised here
|
|
}
|
|
|
|
@Test
|
|
public void test() {
|
|
check("foo.txt", "key1").isTrue();
|
|
check("bar.txt", "key2").isTrue();
|
|
}
|
|
----
|