在Android中测试Color类未按预期工作

5

我正在尝试为我的Android应用程序中的Java类编写测试用例,但结果似乎与预期不符。

以下是我的测试用例:

public void testGetColor() throws Exception {
    ShadesColor color = new ShadesColor(100, 200, 250);
    Assert.assertEquals(Color.rgb(100, 200, 250), color.getColor());

    Assert.assertEquals(100, color.getRed());
    Assert.assertEquals(200, color.getGreen());
    Assert.assertEquals(250, color.getBlue());
}

以下是ShadesColor类。
public class ShadesColor {

    int color;

    public ShadesColor(int red, int green, int blue)
    {
        color = Color.rgb(red, green, blue);
    }

    public int getColor(){
        return color;
    }

    public ShadesColor interpolate(ShadesColor endColor, double percentage){
        int red = (int)(this.getRed() + (endColor.getRed() - this.getRed()) * percentage);
        int green = (int)(this.getGreen() + (endColor.getGreen() - this.getGreen()) * percentage);
        int blue = (int)(this.getBlue() + (endColor.getBlue() - this.getBlue()) * percentage);
        return new ShadesColor(red, green, blue);
    }

    public int getRed(){
        return Color.red(color);
    }

    public int getGreen(){
        return Color.green(color);
    }

    public int getBlue(){
        return Color.blue(color);
    }
}

当调用ShadesColor构造函数时,颜色整数值始终为0。由于Android.Color默认没有模拟,因此我在我的build.gradle文件中添加了以下行:
testOptions {
    unitTests.returnDefaultValues = true
}

我有什么遗漏吗?

什么是ShadesColor? - Blackbelt
ShadesColor只是我创建的一个类。它是android Color类的一个包装器。已相应更新问题。 - Izaaz Yunus
2个回答

2

我认为你正在进行本地单元测试,而不是Android仪器化测试。本地单元测试没有真正的Color类,这就是你添加unitTests.returnDefaultValues = true的原因,这使得构造函数中的Color.rgb(red, green, blue)返回零。

模拟Color类或使用另一个类。谢谢。


0

使用 Robolectric 代替 Mockito。使用 @RunWith(RobolectricTestRunner.class) 运行你的测试。


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