我正在尝试为现有的类编写一些单元测试(在JVM上运行,而不是在模拟器或设备上运行),并且遇到了一些问题,我应该如何构建测试或者如果我想要的话要做甚至可能。
我有一个类,它会将一个View注入其中,进行一些计算并在View上设置一些值。这是一个具体的例子:
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);
}
}
我希望通过单元测试来确定:
我认为我可以解决这个问题的方法是使用Mockito创建一个模拟视图并将其传入。我的想法是我在模拟视图上设置了一些初始值,使用doTranslate()方法来改变这些值然后验证模拟视图在传递给方法后是否已应用新的正确值。我发现的是,模拟不能改变它们的值。您可以将它们设置为返回您想要的任何值,但它不像您可以动态设置它们的值,就像您可以像真实对象一样。
我对嘲讽的看法是正确还是我错过了什么?
我可以想到解决这个问题的一种方法是要求完全取消传递View,而是将问题分解为更小的方法。所以我可以创建 int calculateDeltaX(int x)和 int calculateDeltaY(int y)方法,让它们实际返回值而不是修改View对象。这将使翻译类易于单元测试,但是我在调用类中仍然存在一个问题,我需要使用测试来验证calculateDeltaX()被调用并且其值设置在View上。是否有一种很好的方法可以实现我所描述的将问题分解为小单元测试并验证调用类行为的内容?