2011-02-28 75 views
14

当前,我正在使用java和selenium rc编写自动化测试。忽略测试用例中的声明失败(JUnit)

我想验证所有在场的用户界面上的内容,功能,即如下:

public String UITest() throws IOException { 

    String result="Test Start<br />"; 

    try { 
     openfile(1); 
     for (String url : uiMaps.keySet()) { 
      selenium.open(url); 
      for (String item : uiMaps.get(url)) {     
       assertEquals(url+" check: " + item, true,selenium.isTextPresent(item)); 
       result+=url+" check: " + item+" : OK<br />"; 
      } 
     } 
    } catch (AssertionError e) { 
     result+=e.getMessage(); 
    } 
    result+="Test finished<br />"; 
    return result; 
} 

功能假设返回一个字符串包含有关测试的信息。但是,一旦发生断言错误,函数就会停止。

所以,我想知道是否有办法忽略失败并继续执行所有的断言验证。

感谢您的任何帮助

回答

18

你可以使用一个JUnit 4 error collector rule

的ErrorCollector规则允许 执行的测试,以继 后发现第一个问题(对于 例如,收集所有的 不正确表中的行,并立即报告 他们全部)

例如你可以写这样的测试。

public static class UsesErrorCollectorTwice { 
    @Rule 
    public ErrorCollector collector= new ErrorCollector(); 

    @Test 
    public void example() { 
    String x = [..] 
    collector.checkThat(x, not(containsString("a"))); 
    collector.checkThat(y, containsString("b"));    
    } 
} 

错误收集器使用hamcrest Matchers。根据您的喜好,这是积极或不积极的。

+0

看来它会执行所有的测试,即使有一个失败。但我有另一个问题。我检查了API,它说表中的所有不正确的行,并一次报告它们。我的问题是,我能以任何方式获取表格的信息?谢谢。 – user638297 2011-02-28 22:58:56

+0

由于原始错误收集器的错误列表的可访问性,我通过继承junit实现了自己的错误收集器。现在它可以工作。非常感谢您的帮助。 – user638297 2011-03-01 00:20:54

+0

@ user638297是的,实现一个完全符合您需要的MethodRule并不难。你能收集你寻找的所有信息吗? – 2011-03-01 08:48:17

0

不要在函数中声明任何东西。返回说空,而是和有谁调用它继续下去,但随后失败,如果该函数返回null

2

documentation

所有硒断言可以在3种模式下使用:“断言”,“验证“和”waitFor“。例如,你可以“assertText”,“verifyText”和“waitForText”。当“断言”失败时,测试会中止。 当“验证”失败时,测试将继续执行,记录失败。这允许一个单一的“断言”,以确保应用程序在正确的页面上,接着是一串“验证”断言测试表单字段值,标签等

+0

我认为问题是JUnit的assertEquals功能,而不是硒,因为我使用的硒功能是“isTextPresent”,它只负责返回一个布尔值。纠正我,如果我错了。谢谢。 – user638297 2011-02-28 21:23:31

+1

根据文档,您总是可以选择:* assert * TextPresent,* verify * TextPresent和*是* TextPresent。每个版本都有不同的行为。 – 2011-02-28 21:35:12

1

我敢肯定,你搞明白了自己现在:在try-catch应该是里面的for循环,而不是外界的它;)