在我的webdriver脚本中,我有三种方法
setup, test and tearDown
遵循junit惯例。
在test
方法中,我几乎没有这样的断言
@Test
public void testStudentHome() throws Exception {
String classCode = "I6OWW";
Utilities.studentSignin(driver, baseUrl);
assertEquals(true, sth.openNotification());
assertEquals("My Scores", sth.myScores(true));
}
sth
是我正在执行测试的PageObject,我在setup
方法中创建。
我从这样的main
方法调用所有这三种方法:
public static void main(String[] args) {
StudentHomeTest sht = new StudentHomeTest();
try {
sht.setup();
sht.testStudentHome();
sht.tearDown();
} catch (Exception ex) {
Logger.getLogger(StudentHomeTest.class.getName()).log(Level.SEVERE, null, ex);
sht.tearDown();
}
}
现在在运行测试时,如果某些断言失败,测试方法应该(这是我期望的)抛出异常,main
方法应该调用tearDown
方法。但这不会发生。浏览器窗口继续留在那里。
我正在使用netbeans ide来运行测试。
答案 0 :(得分:2)
遵循junit惯例
如果您遵循jUnit约定,那么您将知道拆解方法属于@After方法,因为此方法将在测试后始终运行。
使用@After
jUnit注释创建一个新方法。
@After
public void tearDown() {
sht.tearDown();
}
你知道吗,我相信你在jUnit中遇到了assertEquals
的经典问题。
this answer ......
被盗JUnit调用.equals()方法来确定方法assertEquals(Object o1,Object o2)中的相等性。
因此,使用assertEquals(string1,string2)绝对安全。 (因为字符串是对象)
-
而不是在这些调用上使用assertEquals
,而是使用assertTrue()
。
assertTrue(sth.openNotification());
assertTrue("My Scores".equals(sth.myScores(true)));
答案 1 :(得分:1)
AssertionError
未展开Exception
- 它是Throwable
。
但无论如何,你应该
try {
sht.setup();
sht.testStudentHome();
} finally {
sht.tearDown();
}
不需要捕获块。 main
可以throw Exception
。