2014-05-08 116 views
3

我在Junit中遇到了參數化測試問題。我一直堅持這一段時間,我想知道是否有人可以幫助我。Junit @Parameters進行域測試

這裏是我的代碼

@RunWith(Parameterized.class) 
public class DomainTestWithinBorders { 

int x; 
float y; 
boolean expectedOut; 

void DomainTest(int xIn, int yIn, boolean out) { 
    this.x = xIn; 
    this.y = yIn; 
    expectedOut = out; 
} 

@Test 
public void testEqual() { 
    boolean actualOut = (x == y); 
    assertEquals(expectedOut, actualOut); 
} 

@Parameters 
public static Collection<Object[]> data() { 
    Object[][] values = { { 0, 10.0, false }, { 1, 16.0, false }, 
      { 17, 17.0, true } }; 
    return Arrays.asList(values); 
} 
} 

運行此我得到以下錯誤:

java.lang.IllegalArgumentException: wrong number of arguments 

我不知道爲什麼我得到這個錯誤。我覺得我已經嘗試了一切。

回答

2

首先,你的構造是不是一個真正的構造函數:

void DomainTest(int xIn, int yIn, boolean out) { 
    this.x = xIn; 
    this.y = yIn; 
    expectedOut = out; 
} 

應該是:

public DomainTestWithinBorders(int xIn, float yIn, boolean out) { 
    this.x = xIn; 
    this.y = yIn; 
    this.expectedOut = out; 
} 

(注意正確類型的yInfloat,不int):


如果你解決這個問題你還是會出現以下情況例外:

java.lang.IllegalArgumentException: argument type mismatch

爲了解決這個問題,更改:

Object[][] values = { { 0, 10.0, false }, { 1, 16.0, false }, 
     { 17, 17.0, true } }; 

到:

Object[][] values = { { 0, 10.0f, false }, { 1, 16.0f, false }, 
     { 17, 17.0f, true } }; 
+0

感謝這麼多覺得自己像個白癡不檢查缺失的構造 – DaanV

0

我改變你的構造以及因爲您的數據()方法中的一些修改

@RunWith(Parameterized.class) 
public class DomainTestWithinBorders extends TestCase { 

    int x; 

    float y; 

    boolean expectedOut; 

    public DomainTestWithinBorders(int xIn, float yIn, boolean out) { 
     this.x = xIn; 
     this.y = yIn; 
     expectedOut = out; 
    } 

    @Test 
    public void testEqual() { 
     boolean actualOut = (x == y); 
     assertEquals(expectedOut, actualOut); 
    } 

    @Parameters 
    public static Collection<Object[]> data() { 
     Object[][] values = { { 0, 10.0f, false } }; 
     return Arrays.asList(values); 

    } 
} 
1

@Parameterized對於這麼簡單的工作來說太重了。嘗試簡單一點。例如,你可以使用zohhak參數測試:

import static junit.framework.Assert.assertEquals; 
import org.junit.runner.RunWith; 
import com.googlecode.zohhak.api.TestWith; 
import com.googlecode.zohhak.api.runners.ZohhakRunner; 

@RunWith(ZohhakRunner.class) 
public class DomainTestWithinBorders { 

    @TestWith({ 
     "0, 10.0, false", 
     "1, 16.0, false", 
     "17, 17.0, true" 
    }) 
    public void testEqual(int x, float y, boolean expectedOut) { 
     boolean actualOut = (x == y); 
     assertEquals(expectedOut, actualOut); 
    } 
}