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中也没有单元测试。现在它有了这么多的意义,谢谢您的详细解释。