Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android上的单元测试事件序列_Java_Android_Unit Testing_Junit - Fatal编程技术网

Java Android上的单元测试事件序列

Java Android上的单元测试事件序列,java,android,unit-testing,junit,Java,Android,Unit Testing,Junit,我正在尝试对Android应用程序的一部分进行单元测试,其中一个类将调用特定的回调序列。Android附带的JUnit版本中是否有一个很好的机制来处理这个问题 到目前为止,我想到的是: testObj.call(new Listener() { boolean a = false, b = false, c = false; @Override public doA() { assertFalse(a); a = true; } @Override p

我正在尝试对Android应用程序的一部分进行单元测试,其中一个类将调用特定的回调序列。Android附带的JUnit版本中是否有一个很好的机制来处理这个问题

到目前为止,我想到的是:

testObj.call(new Listener() {
  boolean a = false, b = false, c = false;

  @Override
  public doA() {
    assertFalse(a);
    a = true;
  }

  @Override
  public doB() {
    assertTrue(a);
    assertFalse(b);
    b = true;
  }

  @Override
  public doC() {
    assertTrue(b);
    assertFalse(c);
    c = true;
  });

assertTrue(c); // I know this won't work, but something like this
我想要的是

final PhaseTester phazer = new PhaseTester();
testObj.call(new Listener() {
  @Override
  public doA() {
    phazer.doPhase(1);
  }

  @Override
  public doA() {
    phazer.doPhase(2);
  }

  @Override
  public doA() {
    phazer.doPhase(3);
  }
});

assertTrue(phazer.maxPhase(), 3);

在标准JVM中,Mockito之类的模拟框架将为您提供这种类型的测试。我从未做过任何Andriod开发,并且意识到传统的模拟框架不能与dalvikjvm一起工作。然而,我发现这篇文章将允许您在Android仿真器之外对代码进行单元测试

然后您可以编写如下代码

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

@Test
public void testSomething() {

    // create a mock object
    PhaseTester phaser = mock(PhaseTester.class);

    // perform test
    TestObj testObj = new TestObj();
    testObj.call(phaser);

    // verfiy the mock object was called
    verify(phaser).doA();
    verify(phaser).doB();
    verify(phaser).doC();

}

在标准JVM中,Mockito之类的模拟框架将为您提供这种类型的测试。我从未做过任何Andriod开发,并且意识到传统的模拟框架不能与dalvikjvm一起工作。然而,我发现这篇文章将允许您在Android仿真器之外对代码进行单元测试

然后您可以编写如下代码

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

@Test
public void testSomething() {

    // create a mock object
    PhaseTester phaser = mock(PhaseTester.class);

    // perform test
    TestObj testObj = new TestObj();
    testObj.call(phaser);

    // verfiy the mock object was called
    verify(phaser).doA();
    verify(phaser).doB();
    verify(phaser).doC();

}

是的,robolectric和mockito,正是我们使用的。唯一的问题是静态:@然后你可以用它来处理你不能用Robolectric处理的静态。由于正在使用testrunner和一些复杂的幕后工作,是的,robolectric和mockito,正是我们使用的。唯一的问题是静态:@然后你可以用它来处理你不能用Robolectric处理的静态。由于正在使用testrunner和一些复杂的幕后工作(sh*t:-)