如何在安卓设备上进行标量测试?

7
我不确定“标量测试”是否是正确的术语,但我指的是不是布尔值“失败或成功”的测试。 我正在处理一个用于Android的色度调谐器问题:http://code.google.com/p/androidtuner/,并且我想通过运行一些wav文件并处理生成的音高图来测试算法。 目标是将标量测试结果定义为归一化的x-y平方和,其中x为检测到的音高,y为期望的音高。 因此,完美的测试运行将为0,但更现实的情况是我想调整算法并查看/如何改善所有测试用例。
一般来说,单元测试能否产生数字而非布尔值? Android测试框架允许吗? 该怎么与Eclipse集成?
我的当前想法只是绕开一切并使用adb获取运行每个测试后生成的文件。虽然这并不太好。
3个回答

1

我认为单元测试不是你在这里处理任务的正确工具。由于它们的本质,单元测试框架旨在产生真/假结果。

如果你只是想通过使用不同的输入数据来调用算法以生成一些指标,你可以考虑编写自己的Instrumentation子类。这就是Android本身用来在设备上运行单元测试的方法。

Instrumentation将允许您使用任何需要的数据集调用您的服务/活动,并构建一个结果Bundle来总结结果。

此外,您可以像一组测试用例一样从ADB中调用仪器。


0

我认为你可以利用JUnit4的新功能来实现它。

编写一个规则,每次都执行@Before和@After: JUnit Kungfu幻灯片34

编写一个参数化测试来计算结果: JUnit Kungfu幻灯片23

如果你在使用电子表格,可以在电子表格中填入如下值: current-value;expected-min;expected-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)));
    }
}

我不知道其他测试数据的方法。HF


这似乎是一种不错的导入数据的方式。但是测试结果仍然只有成功或失败两种情况。 - ubershmekel

0

在这种情况下,单元测试并不是很适合。单元测试的结果是通过或失败,所以您需要设置一个阈值(误差范围),来定义什么是通过。这确实会产生一些结果,即您可以比较运行之间的通过/失败数量,但在这个过程中您也会失去相当多的信息。

我建议只将标量结果记录到CSV文件中,并在稍后在电子表格中加载它。您甚至可以在单元测试中执行此操作。

除此之外,我想不出一个框架能够完全满足你的需求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接