对 Android Activity 中的方法进行单元测试

Ezi*_*zio 4 java android unit-testing

我不知道是否有人回答,我发现了一些类似的问题,但这些答案对我来说没有任何意义。所以,我又来问了。

我们如何测试活动内部的方法。

public class MyActivity extends AppCompatActivity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       //inflate layout        
   }

   public int someMethod() {
       //perform some logic and return an integer
   }

}
Run Code Online (Sandbox Code Playgroud)

我想对该方法进行单元测试,someMethod但是我该怎么做,因为我无法创建活动的实例并直接调用该方法。被测方法不使用任何 android 组件,所以我不想使用 Roboelectric 或任何其他此类库或工具。这是一个普通的java方法。

我知道的一种方法是将方法移到另一个类并对该类进行单元测试,我对此非常满意,但我想知道这是否是正确的方法(为此目的创建一个单独的类),或者有没有其他方法可以做到?

感谢您的任何反馈。

Gri*_*ram 5

稍微深入一下理论,您不想在另一个类中测试单个方法。遵循 SOLID 和 DRY 原则,您的类应承担单一职责。所以如果你认为你只想测试一个方法,这个方法显然比类的其余部分有另一个责任。这导致我们:它不应该在那个特定的类中。

单元测试与测试背后的计划一样好(和一样有价值)。

回答您的问题:是的,您可以调用 anew myActivitiy()并且单元测试可能会运行它(至少我是这么认为的)。但是,如果该方法使用运行时值/上下文或来自该活动的任何其他内容,则不能不运行 Espresso 或类似框架。

我建议创建一个合适的可测试的对象模型。

单元测试只能测试编写测试的代码

干杯,格里斯

  • 你在函数中思考,而不是在类中。你有没有用过“适配器”?像 ArrayAdapter、CursorAdapter 等?基本上,那些也只是具有生命周期方法、绑定视图、检索项目等的“列表管理”类。因此,从面向对象的角度来看,您的活动中没有 List<string>,您有一个一种 ListManager 类,用于保存列表、检索、添加、删除项目并为您管理列表。这个类然后是单元可测试的。您的活动只是调用 listManager.get(...)。并且完全没有任何限制,也没有任何单元测试 (4认同)