为什么我不能在Mammal对象中抛出异常,并在创建该对象的Test类中捕获它?
package animals;
public class Mammal extends Animal{
public final boolean predation, herbivory;
public String hairColor;
public Mammal() {
super();
this.predation = rand.nextBoolean();
this.herbivory = rand.nextBoolean();
this.hairColor = colors[rand.nextInt(8)];
}
public Mammal(boolean predation, boolean herbivory, String hairColor) {
super();
this.predation = predation;
this.herbivory = herbivory;
this.hairColor = hairColor;
}
public Mammal(boolean predation, boolean herbivory, String hairColor, String name, boolean sex) {
super(name, sex);
this.predation = predation;
this.herbivory = herbivory;
this.hairColor = hairColor;
}
public void takeDamage(int damage) throws TakeDamageException{
if(damage < 1) {
throw new TakeDamageException("Damage cant be negative!");
}
else this.health -= damage;
}
我试图捕获由teDamage方法抛出的异常,但我得到:异常TakeDamageException永远不会抛出在相应的try语句的正文中
和:未报告的异常TakeDamageException;必须被捕获或声明为抛出mammal.take损害(-123);
import animals.*;
public class Test extends Mammal {
public static void main(String[] args){
Mammal mammal = new Mammal();
System.out.println(mammal.doDamage());
System.out.println(mammal.getEnergy());
try {
mammal.takeDamage(-123);
}
catch(TakeDamageException e) {
System.out.println("Couldnt take damage:" + e);
}
}
}
将我的异常类定义为:
public class TakeDamageException extends Exception {
public TakeDamageException(String message) {
super(message);
}
public TakeDamageException() {
}
}
您可能有一个潜在的问题:从静态上下文引用非静态方法akeDamage(int)
。即使您在Mammal
的子类中工作,您也需要引用它的实例才能使用该方法。
一个更简洁的例子很好。我不同意测试应该继承自哺乳动物,但在我的例子中保留了它:
哺乳动物.java:
public class Mammal {
int health =500;
public void takeDamage(int damage) throws Exception{
if(damage < 1) {
throw new Exception("Damage cant be negative!");
}
else this.health -= damage;
}
}
Test.java:
public class MTest extends Mammal {
public static void main(String args[]) {
Mammal m = new Mammal();
try {
m.takeDamage(-100);
} catch(Exception e) {
System.out.println("Exception");
}
}
}
你可能一次做的太多了。婴儿步。
问题内容: 我有一个带有返回类型的方法。它还可以引发许多异常,因此我想测试所引发的异常。所有尝试均以相同的原因失败: Stubber类型中的when(T)方法不适用于参数(void) 有什么想法可以获取引发指定异常的方法吗? 问题答案: 括号放置不正确。 您需要使用: 而 不是 使用: 在文档中对此进行了解释
问题内容: 因此,我知道IEEE 754为不是实数的值指定了一些特殊的浮点值。在Java中,铸造这些值的原始不会 不 抛出异常像我本来期望。相反,我们有以下内容: 在这些情况下 不 抛出异常的理由是什么?这是IEEE标准,还是Java设计者的选择?我是否不知道有这样的强制转换是否可能导致异常后果? 问题答案: 在这些情况下不抛出异常的理由是什么? 我认为原因包括: 这些都是极端情况,在执行此类操作
为什么这段代码不抛出?看一看: 我不知道!
我有一个返回类型为的方法。它还可以抛出许多异常,所以我想测试一下那些被抛出的异常。所有尝试都失败了,原因相同: 类型Stubber中的(T)不适用于参数(void)时的方法 有什么想法,我可以如何获得方法抛出一个指定的异常?
最近,在一次代码审查中,一位同事说“测试不应该有try-catch块”。他还向我指出了关于的信息,我可以使用它重写对异常数据执行检查的一些测试。 然而,我遇到了一种情况,我不确定我是否能消除试捕。我正在为一个方法编写单元测试,该方法将抛出一个异常,并执行一些我需要使用JMockit验证的行为。假设测试中的代码包含如下内容 JUnit测试当前看起来像 我找不到摆脱试捕的好方法。就我个人而言,我不认为
问题内容: 我正在使用JAXB XMLadapter来编组和解组布尔值。C#应用程序也将访问该应用程序的XML文件。我们必须验证此XML文件,这是使用XSD完成的。C#应用程序为布尔节点写入“ True”值。但是我们的XSD确实验证了同样的结果,因为它只允许“ true / false”或“ 1/0”。因此,我们在XSD中将String保留为布尔值,并且XMLAdapter会验证该字符串是否在我们