2015-04-02 63 views
4

什麼是@Test實際上呢?我有一些測試沒有它,他們運行良好。什麼是JUnit 4中@Test註解實際上做

我的班級開始與

public class TransactionTest extends InstrumentationTestCase { 

測試用兩種運行:

public void testGetDate() throws Exception { 

@Test 
public void testGetDate() throws Exception { 

編輯:有人指出,我可能會使用JUnit 3測試,但我想我使用JUnit 4:

enter image description here

+0

JUnit 4中還提供了JUnit的3 – 2015-04-05 09:42:38

回答

7
@Test 
public void method() 

@Test => annotation identifies a method as a test method. 
@Test(expected = Exception.class) => Fails if the method does not throw the named exception. 
@Test(timeout=100) => Fails if the method takes longer than 100 milliseconds. 

@Before 
public void method() =>This method is executed before each test. It is used to prepare the test environment (e.g., read input data, initialize the class). 

@After 
public void method() => This method is executed after each test. It is used to cleanup the test environment (e.g., delete temporary data, restore defaults). It can also save memory by cleaning up expensive memory structures. 

@BeforeClass 
public static void method() => This method is executed once, before the start of all tests. It is used to perform time intensive activities, for example, to connect to a database. Methods marked with this annotation need to be defined as static to work with JUnit. 

@AfterClass 
public static void method() => This method is executed once, after all tests have been finished. It is used to perform clean-up activities, for example, to disconnect from a database. Methods annotated with this annotation need to be defined as static to work with JUnit. 

@Ignore => Ignores the test method. This is useful when the underlying code has been changed and the test case has not yet been adapted. Or if the execution time of this test is too long to be included. 
1

它標識的方法爲測試方法。 JUnit調用該類,然後調用註釋的方法。

如果發生異常,則測試失敗;但是,您可以指定應發生異常。如果沒有,測試將失敗(測試異常 - 排序測試):

@Test(expected = Exception.class) - 如果方法沒有拋出指定的異常,則失敗。

您還可以設置時間限制,如果功能不與分配的時間內完成它會失敗:

@Test(超時= 500) - 失敗,如果該方法需要超過500毫秒以上。

+0

HMM的類。有或沒有\ @測試它顯示17 17測試運行中的17。我在這個類中有17個函數,所以它看起來就像沒有運行\ @Test – nycynik 2015-04-02 18:08:09

+3

@Test註釋表明測試方法附加到的public void方法可以作爲測試用例運行而不需要擴展TestCase。我假設(因爲你的測試類沒有顯示),你的類正在擴展TestCase,它是JUnit 3.在JUnit 4中,你不必這樣做。試試看看是否所有的測試都通過了。 它還允許添加其他註釋,如@ Before/@ BeforeClass和@ After/@ AfterClass。您不會在JUnit 3中獲得該選項。它更加靈活。 – Shaggy 2015-04-02 18:24:34

+0

你不僅需要在JUnit4風格的測試中擴展TestCase,但是如果你這樣做了,許多功能(如規則,超時和預期異常)將不起作用。 – NamshubWriter 2015-04-03 02:53:02

1

在JUnit 4的@Test註釋是用來告訴該JUnit的特定方法是一個測試。在JUnit 3中,每個方法都是一個測試,如果它的名字以test開頭,並且它的類擴展爲TestCase

我認爲InstrumentationTestCase延伸junit.framework.TestCase。這意味着您在JUnit 3測試中使用JUnit 4註釋。在這種情況下,運行測試的工具(您的IDE或構建工具,如Ant或Maven)決定是否識別@Test註釋。您可以通過將testGetDate()重命名爲不以test開頭的內容進行驗證,例如, shouldReturnDate()。如果您的工具仍然運行17次測試,但您知道它支持JUnit 3測試中的JUnit 4註釋。如果它運行了16次測試,那麼你知道@Test註釋只是一個什麼也不做的flashbang。

JUnit 4中仍然提供的JUnit 3(junit.framework封裝)的類。這意味着您可以在JUnit 4中使用JUnit 3樣式測試。

+0

謝謝!我該如何確定使用junit4? – nycynik 2015-04-04 20:25:59

+0

不要擴展junit.framework.TestCase或使用junit.framework包中的任何其他類。 – 2015-04-05 09:37:35

0

在JUnit中,根據測試執行的觀點,註解用於爲方法或類提供含義。一旦你在方法中使用@Test註解,那麼這個方法不再是一個普通的方法,它是一個測試用例,它將作爲IDE的測試用例執行,JUnit將根據傳遞的測試用例或基於郵件的方式展示其執行結果你的斷言。

如果你開始使用JUnit作爲一個初學者在這裏做檢查了簡單的JUnit教程 - http://qaautomated.blogspot.in/p/junit.html

相關問題