我试着测试一个简单的类,我在测试一个例子,如果我把一个字符串放进一个方法中,如果这个方法不是某个列表(侧臂)的一部分,它应该返回一个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;
}