2014-04-15 172 views
0

這是一個示例程序:功能測試,說明

public class FunctionalTest { 
    public int f(int r) { 
     int result = r * 5; 
     return result; 
    } 
    public static void main(String[] args) { 
     FunctionalTest funct = new FunctionalTest(); 
     System.out.println(funct.f(5)); 
    } 
} 

我是個初學者。 如何爲此代碼編寫功能測試? 如何編寫功能測試?我需要TestNG嗎? 寫檢查方法就足夠了嗎? 有人可以向我解釋併爲這個程序寫一個樣本功能測試嗎?

+0

你的意思是測試應用程序的某個功能嗎? –

+0

是功能測試。沒有單元測試。 – user3412962

回答

0

首先,您需要對要驗證的合同有一個清晰的定義。從代碼中,我認爲它就像「該方法應該返回等於參數乘以5的數字」。

TestNG,JUnit或其他測試框架對您的情況不是強制性的。該測試可能看起來像:

public void testF() { 
    int arg = 5; 

    int result = new FunctionalTest().f(arg); 

    assert result == arg * 5; 
} 

也請記住,使用assert你需要JVM開始-ea標誌。

+0

'assert result == arg * 5'通過這樣做,您複製了要測試的方法的代碼,這不是一個好習慣。在這裏正確的應該是隻測試預期的結果...所以如果輸入是5,那麼'assert result == 25' – fmodos

+0

-ea標誌應該放在eclipse圖標快捷方式中的路徑前面? – user3412962

+0

@ user3412962號碼這是要運行你的程序的虛擬機的標誌,它應該放在某種運行配置中,在「虛擬機參數」,「JVM標誌」,「Java啓動參數」之類的行稱之下。我無法提供確切的名稱,因爲我的機器上沒有Eclipse:( –

2

好吧,如果你明確要求功能測試,有沒有什麼可以與代碼片段做。您可以使用JUnit這樣從F方法做單元測試:

@Test 
public void testF(){ 
FunctionalTest t1 = new FunctionalTest(); 
    assertEquals((t1.f(1) % 5), 0); //checks that is getting multiplied by 5. 
} 

不過,想要功能測試,通過運行你的應用程序編譯和評估結果,您必須通過多個單元的測試您的應用程序的功能( AKA整合):你的方法和你的主要方法。

問候!

+0

我知道這個程序非常簡單,但是我想了解一下這個簡單的例子,功能測試的原理如何。謝謝 – user3412962

+0

現在清楚了嗎?只要考慮測試一堆代碼/元素/包/代表單一功能的系統 – ra2085

+0

現在對我來說是可以理解的,我的任務是找出如何以最簡單的方式進行測試,你的解釋也給了我很多理解。 – user3412962

0

當心你所使用的術語:

  • 黑盒測試:

    • 功能測試,用戶/客戶

    這意味着提供值,你必須測試整個系統(硬+軟)

  • 測試應針對您的用戶/客戶需求(明確報告或測試)

你可以使用任何你想測試的功能(從單元測試到jbehave)。

在你的情況(使用JUnit 4和AssertJ):

import org.assertj.core.api.Assertions; 
import org.junit.Test; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

/* 
As an user 
I want have 25 whatever I sent 
*/ 
public class NumberGenerationTest { 

    private static final String PATH = "directory of your class file"; 
    private InputStream stdout; 

    /* Nominal case */ 
    @Test 
    public void shall_return_number_25_when_called_with_5() throws Exception { 
    when_I_call_FunctionalTest_with("5"); 
    then_it_returns("25"); 
    } 
    /* Nominal case or potential error case */ 
    @Test 
    public void shall_return_number_25_when_called_with_10() throws Exception { 
    when_I_call_FunctionalTest_with("10"); 
    then_it_returns("25"); 
    } 

    /* Nominal case or potential error case */ 
    @Test 
    public void shall_return_number_25_when_called_with_ABC() throws Exception { 
    when_I_call_FunctionalTest_with("ABC"); 
    then_it_returns("25"); 
    } 

    private void when_I_call_FunctionalTest_with(String parameter) throws Exception { 
    ProcessBuilder builder = new ProcessBuilder("java" ,"-classpath", PATH,"FunctionalTest" , parameter); 
    builder.redirectErrorStream(true); 
    Process process = builder.start(); 
    stdout = process.getInputStream(); 

    } 

    private void then_it_returns(String expectedResult) throws Exception { 
    BufferedReader reader = new BufferedReader (new InputStreamReader(stdout)); 
    String line = reader.readLine(); 
    Assertions.assertThat(line).isNotNull(); 
    Assertions.assertThat(line).isEqualTo(expectedResult); 
    } 

} 

看來你在你的主(錯誤)......與否。