написать тест для статического метода и получить NullPointerException, когда я передаю значения в метод - PullRequest
0 голосов
/ 09 июля 2019

Я пишу тест для класса, у которого есть статические методы от JMockit.Некоторые методы получают тип Class в качестве параметра.Я предоставляю этот класс для метода следующим образом:

entityClass = User.class.getClass();

и пишу тест для метода findTableName() следующим образом:

private static Class entityClass;(**edited**)

@BeforeClass
public static void initial() {
    entityClass = User.class.getClass();
}

@Test
public void testGenerateQuery_findTableName(){

    String result = Deencapsulation.invoke(QueryGenerator.class, "findTableName",entityClass);
    assertEquals("user", result);
}

и findTableName() в этом классе: ( Отредактировано )

public class QueryGenerator {

private static Logger logger = LogManager.getLogger("E_logger");

private static String findTableName(Class clazz) {
    Table table = null;
    try {
        table = (Table) clazz.getDeclaredAnnotation(Table.class);
    } catch (Exception e) {
        logger.error("error in find @Table annotation in " + clazz.getSimpleName() + " class\n Exception : " + e);
    }
    return table.name();
}

}

Проблема заключается в том, что после запуска теста я получаю исключение NullPointerException, поскольку параметр clazz в findTableName () получает нулевое значение при инициализации втест в @Before часть.

Я использую @RunWith(MockitoJUnitRunner.class) & @SpringBootTest &

 <dependency>
        <groupId>org.jmockit</groupId>
        <artifactId>jmockit</artifactId>
        <version>1.24</version>
        <scope>test</scope>
 </dependency>

Где моя ошибка?Как мне написать правильный тест для этого метода?

, если я хочу написать его PowerMock, как мне написать?

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Вы можете создать:

private static Object entityClass;(**edited**)

@BeforeClass
public static void initial() {
    entityClass = (Object) new User();
}

или

private static Class<User> entityClass;(**edited**)

@BeforeClass
public static void initial() {
    entityClass = (Class<User>) new User();
}
0 голосов
/ 09 июля 2019

Строка User.class.getClass() всегда будет возвращать Class<Class<?>>

Скорее всего, вы хотите: User.class, чтобы получить Class<User>

Кроме того, ваша переменная entityClass должна быть статической, чтобы к ней можно было обращаться в статическом контексте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...