代码之家  ›  专栏  ›  技术社区  ›  EconNoob

JUnit5在预期另一种异常时获取NullPointerException

  •  0
  • EconNoob  · 技术社区  · 2 年前

    我试着测试一个简单的类,我在测试一个例子,如果我把一个字符串放进一个方法中,如果这个方法不是某个列表(侧臂)的一部分,它应该返回一个illegalArguementException。在本例中:“非沙漠之鹰”不在数组列表中。但为什么测试失败并返回它预期的IllegalArguementException,但实际上是nullPointerException?

    测试课程:

    package RandomClassGenerator;
    
    import static org.junit.jupiter.api.Assertions.assertThrows;
    
    import org.junit.jupiter.api.Test;
    
    public class SidearmTest {
        
        private Sidearm sideArm;
        private String sidearm = "NOT Desert Eagle";
    
        @Test
        public void testSidearm() {
            assertThrows(IllegalArgumentException.class, () -> {
                sideArm.sidearmAttachment(sidearm);
            });
            
        }
    

    被测试的班级:

    import java.util.Arrays;
    import java.util.List;
    
    public class Sidearm implements IGiveRandom{
        
        // This class gives the player a sidearm with/without an attachment, as long as Overkill is not a given perk
    
        private String sidearm;
        private String sidearmAttachment;
    
        private List<String> sidearms = Arrays.asList("M9","USP.45","M1911.45","Desert Eagle");
        private List<String> sidearmAttachments = Arrays.asList("None","Silencer");
    
        // Constructor:
        public Sidearm() {
            sidearm = sidearm();
            sidearmAttachment = sidearmAttachment(sidearm);
        }
        // Gives a random sidearm from the sidearms array list
        public String sidearm() {
            int randomFromList = rand.nextInt(sidearms.size());
            sidearm = sidearms.get(randomFromList);
            return sidearm;
        }
        // Randomely, either gives or not, an attachment for the sidearm:
        public String sidearmAttachment(String weapon) {
            // The Desert Eagle has no attachments
            if (!(sidearms.contains(weapon))) throw new IllegalStateException("Sidearm not found");
            if (sidearm.equals("Desert Eagle")) {
                sidearmAttachment = "None";
            } else {
                // The rest of the sidearms can either have a silencer or no attachment
                int randomFromList = rand.nextInt(sidearmAttachments.size());
                sidearmAttachment = sidearmAttachments.get(randomFromList);
            }
            return sidearmAttachment;
        }
    
    1 回复  |  直到 2 年前
        1
  •  0
  •   John Bollinger    2 年前

    为什么测试失败并返回预期的IllegalArguementException,但实际上是nullPointerException?

    因为变量 sideArm 仍然有其默认值( null )在测试中,当您尝试调用 sidearmAttachment() 在上面。你需要创建一个 Sidearm 为了便于参考,这将是测试的主题。