Java 单元测试Android活动中的方法

Java 单元测试Android活动中的方法,java,android,unit-testing,Java,Android,Unit Testing,我不知道它是否得到了回答,我发现了一些类似的问题,但答案对我来说毫无意义。所以,我再问一次 如何测试活动中的方法。 public class MyActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { //inflate layout } public int someMethod() {

我不知道它是否得到了回答,我发现了一些类似的问题,但答案对我来说毫无意义。所以,我再问一次

如何测试活动中的方法。

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

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

}
我想对方法
someMethod
进行单元测试,但我无法创建活动实例并直接调用该方法,因此如何进行单元测试。测试中的方法不使用任何android组件,因此我不想使用Roboelectric或任何其他此类库或工具。这是一个简单的java方法

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


感谢您的反馈。

从理论上讲,您不想在另一个类中测试一个方法。 在S.O.L.I.D.之后。和D.R.Y.原则,你们的班级有一个单一的责任。 因此,如果您认为您只想测试一个方法,那么这个方法显然比类中的其他方法有另一个职责。这让我们想到:它不应该在那个特定的类中

单元测试只与测试背后的计划一样好(也同样有价值)

回答您的问题:是的,您可以调用
新的myActivitiy()
,单元测试可能会运行它(至少我认为是这样)。但是,如果该方法使用运行时值/上下文或该活动中的任何其他内容,那么在没有运行Espresso或类似框架的情况下,您就无法使用它

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

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


干杯,Gris

由于您不想使用RoboeElectric、Espresso等,因此您需要将其从活动中重构出来。因此,如果不创建另一个类(运行活动的Espresso活动规则),绝对没有办法做到这一点。然后你可以调用它的函数。谢谢你有见地的回答,但请帮助我理解这一点,我使用的方法对严格属于这个类的变量进行操作。例如,假设该类有一个字符串列表,我想从该列表中选择一个特定的字符串,我应该在哪里编写该函数?你认为是在函数中,而不是在类中。您是否使用过
适配器
?比如ArrayAdapter、CursorAdapter等?基本上,这些也只是“列表管理”类,它们有自己的生命周期方法、绑定视图、检索项等。因此,从面向对象的角度来看,您的活动中没有列表,您有一种ListManager类,它保存列表、检索、添加、删除项并为您管理列表。这个类是可单元测试的。您的活动只调用listManager.get(…)。而且完全没有任何限制,在actOh中也没有单元测试。现在它有了这么多的意义,谢谢您的详细解释。