单元测试Android视图

单元测试Android视图,android,unit-testing,Android,Unit Testing,我试图为现有类编写一些单元测试(在JVM上运行,而不是在模拟器或设备上运行),并且遇到了一些问题,比如我应该如何构造测试,或者我想做的事情是否可能 我有一个类,它将视图注入其中,进行一些计算,并在视图上设置一些值。下面是一个具体的例子: public class Translate { public void doTranslate(View view, int x, int y) { int left = view.getLeft(); int top

我试图为现有类编写一些单元测试(在JVM上运行,而不是在模拟器或设备上运行),并且遇到了一些问题,比如我应该如何构造测试,或者我想做的事情是否可能

我有一个类,它将视图注入其中,进行一些计算,并在视图上设置一些值。下面是一个具体的例子:

public class Translate {

    public void doTranslate(View view, int x, int y) {
        int left = view.getLeft();
        int top = view.getTop();
        int width = view.getWidth();
        int height = view.getHeight();

        int deltaX = 2 * x;
        int deltaY = 3 * y;

        view.setLeft(left + deltaX);
        view.setTop(top + deltaY);
        view.setRight(left + deltaX + width);
        view.setBottom(top + deltaY + height);
    }
}
我希望通过单元测试完成的是确定:

  • deltaX和deltaY计算是否正确执行
  • View是否设置了计算值
  • 我认为我可以解决这个问题的方法是使用Mockito创建一个模拟视图,并将其传入。我的想法是在mock视图上设置一些初始值,使用doTranslate()方法更改这些值,然后验证mock视图在传递给该方法后是否应用了正确的新值。相反,我发现mock不能改变它们的值。您可以将它们设置为返回您想要的任何值,但这不像您可以像对真实对象那样动态地设置它们的值

    我对mock的想法是正确的还是遗漏了什么

    我认为解决这个问题的一种方法是完全消除传递视图,而不是将问题分解成更小的方法。因此,我可以创建intcalculatedeltax(intx)intcalculatedeltay(inty)方法,让它们实际返回值,而不是修改视图对象。这将使translate类易于进行单元测试,但是在调用类中仍然存在一个问题,我需要使用测试验证calculateDeltaX()是否被调用以及它的值是否在视图中设置。有没有一种好的方法来完成我所描述的将问题分解成小单元测试并验证调用类的行为