一个使用Android AssetManager的测试代码如何?

时间:2014-04-11 04:15:35

标签: android testing mocking android-assets

我正在编写代码,该代码将在Android应用的资源中查找特定文件,并按特定顺序对其执行某些操作。资产管理器很容易使用,但我想知道如何编写代码的自动化测试。

示例:假设我想以某种顺序打印以“cool”开头的所有文件的内容的装饰版本,并且是.txt或.text扩展名。代码相对简单,但依赖于AssetManager(这不是编译或测试过的代码,而是草图):

// Pseudo-code!!!
public void catFiles(Context context, OutputStreamWriter out) {
    final AssetManager am = context.getAssets();
    final String[] files = am.list('myfolder/');
    for (String file: files) {
        // Do some filtering on the list
        if(veryCoolFilterThinger(file)) {
            final InputStream in = am.open(file);

            // Do something cool with the chars from the file.
            out.write(decorateCharsFrom(in));
    }
 }

所以问题是,如何测试我的过滤以及如何测试装饰?这里的根本问题是我没有看到如何编写模拟AssetManager。我可以考虑两种选择,它们可以进行不同类型的测试。

选项1:不要直接在资产管理器上运行,而是引入我自己的界面,例如:

interface ReadableFileContainer {
    public String[] list(String basePath);
    public InputStream open(String path);
}

然后我会为我的测试编写一个这个接口的模拟版本,并使用AssetManager作为我的生产代码。看起来很好,但也感觉AssetManager已经是那种抽象层次,所以我不喜欢这样做。

选项2:编写一堆测试应用程序,每个应用程序具有不同的资产集以提供不同的测试用例。这是非常端到端的,并没有添加可能不需要的抽象层,但确实涉及编写大量的测试应用程序(不仅仅是单独的测试,因为它们需要不同的资产目录结构)。

0 个答案:

没有答案