Home > database >  Unable to run any Junit4 tests - InvalidTestClassError: Invalid test class
Unable to run any Junit4 tests - InvalidTestClassError: Invalid test class

Time:11-21

I am trying to run Junit4 tests and I am unable to run it. I have the following dependency installed

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>

My test class looks like this

package model.validators;

import org.junit.Assert;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;

class UserValidatorTest {

    @Test
    public void shouldReturnTrueForValidPhoneNumbers() {
        List<String> phoneNumbers = Arrays.asList(
                "9876543210",
                "7777543210"
        );
        boolean result = UserValidator.validateUserPhoneNumbers(phoneNumbers);

        Assert.assertTrue(result);
    }
}

When I try to run this test, I get the following error

org.junit.runners.model.InvalidTestClassError: Invalid test class 'model.validators.UserValidatorTest':

I am using IntellijIdea. Any idea what is going wrong here ? TIA

Tried changing dependencies, reloading maven project, setting the correct classpath in Junit Run configurations

CodePudding user response:

I can see that your class UserValidatorTest is not public. On making your class public, you will be able to run the tests.

package model.validators;

import org.junit.Assert;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;

public class UserValidatorTest {

    @Test
    public void shouldReturnTrueForValidPhoneNumbers() {
        List<String> phoneNumbers = Arrays.asList(
                "9876543210",
                "7777543210"
        );
        boolean result = UserValidator.validateUserPhoneNumbers(phoneNumbers);

        Assert.assertTrue(result);
    }
}

CodePudding user response:

JUnit4 requires everything to be public.
JUnit5 is more tolerant regarding the visibilities of Test classes (Test classes, test methods, and lifecycle methods are not required to be public, but they must not be private).

SonarLint Rule description:
In this context (JUnit5), it is recommended to use the default package visibility, which improves the readability of code.

  • Related