Android Studio – 在单元测试中出现空指针异常

huangapple 未分类评论47阅读模式
英文:

Android Studio - Null pointer exception in Unit test

问题

Setting up Test:

@RunWith(MockitoJUnitRunner.class)
public class CardMenuTesting {

@Mock
private Game game = Mockito.mock(Game.class);
@Mock
private Input input;
@Mock
private AssetManager assetManager;
@Mock
private Bitmap bitmap;
@Mock
private Paint paint;
@Mock
private CardMenu cardMenu = Mockito.mock(CardMenu.class);
@Mock
private InstructionsScreen instructionsScreen = Mockito.mock(InstructionsScreen.class);
@Mock
GameScreen gameScreen = Mockito.mock(GameScreen.class);

//@Mock
//private CharacterTestScreen characterTestScreen;

@Before
public void setUp() {
    when(game.getAssetManager()).thenReturn(assetManager);
    when(assetManager.getBitmap(any(String.class))).thenReturn(bitmap);
    when(game.getInput()).thenReturn(input);
    when(cardMenu.getGame()).thenReturn(game);
    when(cardMenu.getName()).thenReturn("CardMenu");
    when(instructionsScreen.getGame()).thenReturn(game);
    when(instructionsScreen.getName()).thenReturn("InstructionsScreen");

    cardMenu = new CardMenu(game);

    when(game.getAssetManager()).thenReturn(assetManager);
    when(gameScreen.getName()).thenReturn("Game Screen");

    cardMenu.instructionButton();
}

TEST METHOD:

@Test
public void testPlayButton() {

    CardMenu cardMenu = new CardMenu(game);

    cardMenu.getInstructions().setPushTriggered(true);
    cardMenu.instructionButton();

    assertTrue(game.getScreenManager().getCurrentScreen().getName().equals("InstructionsScreen"));

}

The method in the Card Menu class I am trying to test:

public void instructionButton()
{
    InstructionsScreen instructionsScreen = new InstructionsScreen(mGame);

    if (instructions.isPushTriggered()) {
        mGame.getScreenManager().addScreen(instructionsScreen);
    }
}

When I run the unit test I get a NullPonterException at:

mGame.getScreenManager().addScreen(instructionsScreen);

and

cardMenu.instructionButton();

The stack trace is as follows:

java.lang.NullPointerException
	at CardMenu.instructionButton(CardMenu.java:161)
	at CardMenuTesting.testPlayButton(CardMenuTesting.java:118)

I want the unit test to pass. Any help appreciated.

英文:

I'm currently trying to complete unit testing on my game and have ran into a null pointer exception in the following code:

Setting up Test:

@RunWith(MockitoJUnitRunner.class)
public class CardMenuTesting {


@Mock
private Game game = Mockito.mock(Game.class);
@Mock
private Input input;
@Mock
private AssetManager assetManager;
@Mock
private Bitmap bitmap;
@Mock
private Paint paint;
@Mock
private CardMenu cardMenu = Mockito.mock(CardMenu.class);
@Mock
private InstructionsScreen instructionsScreen = Mockito.mock(InstructionsScreen.class);
@Mock
GameScreen gameScreen = Mockito.mock(GameScreen.class);

//@Mock
//private CharacterTestScreen characterTestScreen;

@Before
public void setUp() {
    when(game.getAssetManager()).thenReturn(assetManager);
    when(assetManager.getBitmap(any(String.class))).thenReturn(bitmap);
    when(game.getInput()).thenReturn(input);
    when(cardMenu.getGame()).thenReturn(game);
    when(cardMenu.getName()).thenReturn("CardMenu");
    when(instructionsScreen.getGame()).thenReturn(game);
    when(instructionsScreen.getName()).thenReturn("InstructionsScreen");

    cardMenu = new CardMenu(game);


    when(game.getAssetManager()).thenReturn(assetManager);
    when(gameScreen.getName()).thenReturn("Game Screen");

    cardMenu.instructionButton();

}

TEST METHOD:

@Test
public void testPlayButton() {

    CardMenu cardMenu = new CardMenu(game);

    cardMenu.getInstructions().setPushTriggered(true);
    cardMenu.instructionButton();

    assertTrue(game.getScreenManager().getCurrentScreen().getName() == "InstructionsScreen");

}

The method in the Card Menu class I am trying to test:

public void instructionButton()
{
    InstructionsScreen instructionsScreen = new InstructionsScreen(mGame);

    if (instructions.isPushTriggered()) {
        mGame.getScreenManager().addScreen(instructionsScreen);
    }
}

When I run the unit test I get a NullPonterException at:

mGame.getScreenManager().addScreen(instructionsScreen);

and

cardMenu.instructionButton();

The stack trace is as follows:

java.lang.NullPointerException
at CardMenu.instructionButton(CardMenu.java:161)
at CardMenuTesting.testPlayButton(CardMenuTesting.java:118)

I want the unit test to pass. Any help appreciated.

huangapple
  • 本文由 发表于 2020年4月10日 18:37:26
  • 转载请务必保留本文链接:https://java.coder-hub.com/61138497.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定