2014-04-15 192 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); 
    } 

} 

看来你在你的主(错误)......与否。