2014-01-24 31 views
2

我們正在考慮實現一個測試框架,並且對使用哪個框架感到好奇。我們正在選擇TestNG和Spock。這將是一個UI自動化框架,因此它應該儘可能處理儘可能少的模擬數據。我們的代碼庫將由Geb(Groovy)組成。TestNG vs Spock for Automation

話雖這麼說,有3個優點是斯波克持有超過TestNG的:

詳細信息 Spock的運行時間收集了大量的信息,並在需要時呈現給你。 條件不滿意:

max(a, b) == c 
| | | | | 
3 1 3 | 2 
      false 

美麗的語言 表達你的思想在一個美麗而極具表現力的規範語言。

def "subscribers receive published events at least once"() { 
    when: publisher.send(event) 
    then: (1.._) * subscriber.receive(event) 
    where: event << ["started", "paused", "stopped"] 
} 

擴展爲大家 @Transaction? @SpringBean? @DeployApp?藉助Spock的基於攔截的擴展機制,您可以輕鬆創建自己的擴展。

有沒有人有任何意見,爲什麼一個人可能比另一個更好?

這兩者之一是否存在垮臺?

有沒有辦法在TestNG的報告中創建「美麗的語言」?基本上我可以創建自己的標籤,並有一個解析它們的程序?還是已經有第三方庫添加?

感謝您的幫助。

回答

2

對於UI自動化,請在嘗試構建新框架之前查看Geb。 http://www.gebish.org

Geb將與spock和TestNG一起工作。

總的來說,我對spock有非常好的經驗,但不能對TestNG說話。

我的確希望spock擁有像Cucumber這樣的BDD風格報告以及像ScalaCheck這樣的屬性風格測試,但就簡單的TDD風格測試而言,spock具有表現力,易於使用,功能豐富且設計精良。與JUnit相比,spock是一種快樂 - 非常少的儀式需要。

+1

BDD風格的報告進入1.0;希望在以後的版本中進行基於性質的測試。 –

+0

謝謝彼得! Spock真的很好 –

0

我正在使用TestNG幾年,幾個項目,我很滿意它。 從你的問題回答具體點

美麗的語言

測試方法的名稱必須是有效的Java方法名。這意味着沒有空間。 我開始使用should的方法,所以我會將您的方法subscribers receive published events at least once命名爲shouldSubscrbersReceiveEvents。我相信這個較短的名字足以描述其意圖。駱駝案件名稱不如適當的句子可讀,但我看不到其他選擇。

鑑於-時,則第

TestNG中沒有內置的功能來支持。我正在手動使用評論。沒有框架支持的功能,如:

  • 參數從where:部分來。您可以使用@DataProviders
  • 陳述在then:部分斷言。你必須自己寫斷言(assertThat)。

我的樣品測試:

public void shouldUnmarshalDataHeader() throws IOException { 
     //given DataHeader unmarshalled from InputStream 
     DataHeader actual = sut.parseDataHeader(stringToInputStream(BINARY_DATA_HEADER)); 

     //when we create DataHeader using java API 
     DataHeader expected = DataHeaderBuilder 
      .sampleInstance(sut.dateTimeProvider.getLocalDateTime()); 

     //then those two objects are equal 
     Assertions.assertThat(actual).isEqualTo(expected); 
    } 

詳細信息

此功能屬於斷言庫,而不是測試庫。 TestNG具有內置斷言庫,但您可以使用任何其他庫。對我來說https://joel-costigliola.github.io/assertj/效果最好。 斷言消息比簡單的testNG或JUnit的更好。 AssertJ提供流暢的API。學習曲線很少。

如果您有import static org.assertj.core.api.Assertions.*;,只需鍵入assertThat(something).並從IDE完成代碼將指導您。您使用的斷言越好,您的測試的可讀性就越高,您將得到更好的錯誤消息。

可擴展

Spring對TestNG有內置的支持。您的測試必須延長AbstractTestNGSpringContextTestsAbstractTransactionalTestNGSpringContextTests。 然後,您可以將任何Spring Context,@Autowire spring bean加載到您的測試中,使用事務。

查看http://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#testcontext-support-classes-testng瞭解更多詳情。

摘要

對我來說TestNG運行良好。您可以使用Spock測試您可以測試的所有內容。由於TestNG是純Java,因此用於編寫測試的DSL不像Spock中的Groovy那樣功能豐富。但我相信TestNG + AssertJ比Spock(用於Java開發人員)具有更平滑的學習曲線。如果有人對學習Groovy感興趣(也許你也想用Groovy進行生產代碼?),那麼Spock是不錯的選擇,值得初學者投資。

對於學習TestNG的,我強烈建議'實用單位測試使用TestNG和的Mockito'http://practicalunittesting.com/)和'下一代Java測試:TestNG的和高級概念'http://testng.org/doc/book.html)。