【发布时间】:2013-05-23 20:54:51
【问题描述】:
我正在尝试对其他人编写的代码进行 JUnit 测试,但我不知道如何测试异常,因为异常似乎缺少类型。
public Pirate(String name, int initialGold) throws Exception {
if(initialGold < 0)
throw new Exception("Init Gold must be >= 0");
this.name = name;
this.numGold = initialGold;
this.health = Pirate.DEFAULT_HEALTH;
this.isCursed = false;
}
我的 JUnit 代码 sn-p:
@Test
public static void constructorTest() throws Exception{
rodgers = new Pirate("Dread Pirate Rodgers", 10000);
assertEquals("Dread Pirate Rodgers" , rodgers.getName());
assertEquals(10000, rodgers.getNumGold());
assertEquals(100, rodgers.getHealth());
assertEquals(false, rodgers.getIsCursed());
}
@Test()
public static void exceptionTest() throws Exception{
rodgers = new Pirate("Dread Pirate Rodgers" , -100);
}
我知道我需要在 test 的括号中加上 expected =(某种类型的异常),但我对异常类型一无所知。
【问题讨论】:
-
运行测试看看会发生什么。
-
您正在编写一个测试:您想验证是否引发了特定类型的异常。目前您实际上 正在抛出
Exception,但这是一个糟糕的选择——它可能应该是IllegalArgumentException。无论哪种方式,您的测试基本上都需要检查是否抛出了正确的异常 - 但由您决定该类型是什么。 -
为什么rodgers是一个类字段?
-
被测代码抛出异常 - 这是您应该放入预期 = ..... 子句的类型。 (异常其实就是java.lang.Exception)
-
我确定我会后悔的,但是海盗班应该为任何不名为“ROBERTS”的“恐惧”海盗提出一个“想要的”例外是的,是的 - 继续下去-修改我 :-) en.wikipedia.org/wiki/Dread_Pirate_Roberts