Java Android上的单元测试事件序列
我正在尝试对Android应用程序的一部分进行单元测试,其中一个类将调用特定的回调序列。Android附带的JUnit版本中是否有一个很好的机制来处理这个问题 到目前为止,我想到的是: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
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:-)