NullPointerException при заглушке с использованием Mockito - PullRequest
0 голосов
/ 12 января 2020

Я довольно новичок в Mockito, но я получаю NullPointerError при попытке заглушить класс Texture. Вот мой тест:

import com.badlogic.gdx.graphics.Texture;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.junit.MockitoJUnitRunner;
import org.testng.annotations.BeforeMethod;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.class)
 class EntityTest {

     @InjectMocks
     public Texture mockedImg;

     @BeforeMethod
     public void setup() {
         mockedImg = mock(Texture.class);
         when(mockedImg.getWidth()).thenReturn(5);
         when(mockedImg.getHeight()).thenReturn(5);
     }

    @Test
    public void doesAnyOfMyCodeWork() {
         Assertions.assertEquals(mockedImg.getHeight(),5);
    }
}

И вот ошибка, которую я получаю:

java.lang.NullPointerException
    at EntityTest.doesAnyOfMyCodeWork(EntityTest.java:35) <19 internal calls>
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1540) <9 internal calls>
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1540) <18 internal calls>
    at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69)
    at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
    at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
    at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)

(строка 35 - Assertions.assertEquals(mockedImg.getHeight(),5);)

Любая помощь будет быть высоко ценится!

Ответы [ 3 ]

0 голосов
/ 12 января 2020

Простой способ тестирования без аннотации:

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

class EntityTest
{
    @Test
    public void doesAnyOfMyCodeWork()
    {
        Texture mockedImg = mock(Texture.class);
        when(mockedImg.getWidth()).thenReturn(5);
        when(mockedImg.getHeight()).thenReturn(5);
        Assertions.assertEquals(mockedImg.getHeight(), 5);
    }
}
0 голосов
/ 13 января 2020

Итак, теперь у меня есть код, который, кажется, работает следующим образом:

import com.badlogic.gdx.graphics.Texture;
import org.junit.Before;
import org.junit.Test;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;

import static org.mockito.Mockito.*;


@RunWith(MockitoJUnitRunner.class)
public class EntityTest {

     @Mock
     public Texture mockedImg;

     @Before
     public void setup() {
         mockedImg = mock(Texture.class);
         lenient().when(mockedImg.getWidth()).thenReturn(5);
         lenient().when(mockedImg.getHeight()).thenReturn(5);
     }


     @Test
     public void doesAnyOfMyCodeWork() {
         Assertions.assertEquals(mockedImg.getHeight(),5);
     }
}

Что действительно странно, так как вчера у меня был почти тот же самый код, и он вызывал целую массу ошибок (хотя Я переместил свой тест в другую исходную папку, которая могла бы помочь). Спасибо, что помогли мне с этим парнем.

0 голосов
/ 12 января 2020

Если вы хотите издеваться над mockedImg, вам нужно пометить его @Mock. @InjectMocks используется для автоматической вставки фиктивных полей в тестируемый объект.

Поэтому возможным решением вашей проблемы будет следующее

 class EntityTest {

     @Mock
     public Texture mockedImg;

     @BeforeMethod
     public void setup() {
         when(mockedImg.getWidth()).thenReturn(5);
         when(mockedImg.getHeight()).thenReturn(5);
     }

    @Test
    public void doesAnyOfMyCodeWork() {
         Assertions.assertEquals(mockedImg.getHeight(),5);
    }
}
...