2011-10-29 63 views
7

我不確定「標量測試」是否是正確的術語,但是我的意思是不是布爾「測試失敗或成功」的測試。我工作的問題是爲Android一個半音調音器:如何用android做標量測試?

http://code.google.com/p/androidtuner/

而且我想通過運行一些wav文件以及處理所得到螺距圖測試的算法。目標是將標量測試結果定義爲歸一化的x-minus-y-squared-sum,其中x是檢測到的音高,y是預期的音高。因此,一個完美的測試運行將會是0,但更現實一點,我想調整算法,看看它是如何/如何在所有測試案例中得到改進。

一般來說 - 單元測試可以得到一個數字而不是布爾值嗎? android測試框架是否允許它?我應該如何將任何解決方案與Eclipse集成?

我目前的想法是繞過一切,並使用adb來獲取運行每個測試後生成的文件。雖然這並不太棒。

回答

1

這讓我覺得單元測試是你在這裏處理的任務的錯誤工具。就其性質而言,單元測試框架旨在產生真/假結果。

如果你想要做的是通過測試調用不同輸入數據的算法產生一些指標,你可能要考慮編寫你自己的Instrumentation子類。這是Android本身用於在設備上運行單元測試的內容。

Instrumentation將允許您使用您需要的任何數據集來調用您的服務/活動,並且您可以創建結果Bundle來總結結果。

此外,您可以從ADB調用一個檢測工具,就像一組測試用例一樣。

0

我認爲,你可以使用JUnit4的新特性。

編寫執行@Before和@After每次規則: JUnit Kungfu slide 34

寫,計算結果的參數測試: JUnit Kungfu slide 23

如果使用電子表格的工作,你可以填入值電子表格像 電流值;預期分鐘;預計-MAX

import static org.hamcrest.MatcherAssert.*; 
import static org.hamcrest.Matchers.*; 
import static org.junit.matchers.JUnitMatchers.*; 

import java.util.Arrays; 
import java.util.Collection; 

import org.hamcrest.Matchers; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.Parameterized; 
import org.junit.runners.Parameterized.Parameters; 

@RunWith(Parameterized.class) 
public class ParameterizedTest { 

    private final int min; 
    private final int max; 
    private final int current; 


    @Parameters 
    public static Collection<Object[]> data() { 
     return Arrays.asList(new Object[][] { 
      { -1 , -10, -6 }, 
      { -2 , -11, -7 }, 
      { -3 , -12, -8 }, 
      { -4 , -13, -9 }, 
      { -5 , -14, -10 } 
     }); 
    } 

    public ParameterizedTest(int current, int expectedMin, int expectedMax) { 
     this.current = current; 
     this.min = expectedMin; 
     this.max = expectedMax; 

    } 


    @Test 
    public void testName() throws Exception { 
     int yourNewValue = YourNormalizer.normalize(current); 
     assertThat(yourNewValue, both(greaterThan(min)).and(lessThanOrEqualTo(max))); 
    } 
} 

我不知道任何其他方式來測試DAT一個。 HF

+0

這似乎是一種很好的導入數據的方式。但是測試仍然會導致成功或失敗。 – ubershmekel

0

單元測試在這種情況下並不適合。單元測試的結果是合格/不合格,因此您需要設置一個閾值(誤差範圍)來定義什麼是合格。這確實會產生一些結果,即您可以比較運行之間的通過/失敗次數,但是您在該過程中也會丟失相當多的信息。

我建議只將標量結果記錄到一個CSV文件中,並稍後加載到電子表格中。你甚至可以在單元測試中做到這一點。

除此之外,我想不出一個完全符合你需要的框架。