Partiye biraz geç kaldım, ancak burada asenkron çağrılar için çalışan ve hesaplayan bir sınıf örneğidir. EventBus Alay etmek yerine, bunun bir şey yapmasına izin verin ve aşağıdaki TestDriver
sınıfına kaydedin.
Bu çalışmayı yapan şey, DataTransferCallback
sınıfının yardımı ile latch.countDown()
çağrısının beklendiği veya 5 saniye sürmesi beklenen CountDownLatch
.
Test sınıfınızı ve @Subscribe yöntemini kaydettirin, DataTransferCallback
modelini oluşturan yönteme geri aktarın ve oradaki ifadelerinizi yapın.
@RunWith(AndroidJUnit4.class)
public class TestDriver {
private final CountDownLatch latch = new CountDownLatch(1);
private EventBus eventBus;
private DataTransferCallback transferCallback;
public abstract class DataTransferCallback {
abstract void onSuccess(DataTransfer event);
}
@Before
public void setUp() {
EventBus.getDefault().register(this);
eventBus = spy(EventBus.getDefault());
}
@SuppressWarnings("unchecked")
@Test
public void test200Resposne() throws InterruptedException {
// Get known good JSON
final String json = TestJSON.get200Response();
// Class under test
final Driver driver = new Driver(InstrumentationRegistry.getTargetContext());
final JsonParser jsonParser = new JsonParser();
//boolean to hold our test result
final boolean[] testPassed = new boolean[]{false};
transferCallback = new DataTransferCallback() {
@Override
public void onSuccess(DataTransfer event) {
assertNotNull(event);
verify(eventBus).post(event);
assertThat(event.getStatus(), is("OK"));
assertTrue(event.getData() != null);
testPassed[0] = true;
}
};
//Set our test EventBus object
driver.setEventBus(eventBus);
// The actual method under test
driver.parseData(jsonParser.parse(json));
// Set a countdown latch to wait for the result (5s)
latch.await(5000, TimeUnit.MILLISECONDS);
// will wait here until 5s or the @Subscrube method is hit
assertTrue(testPassed[0]);
}
//Because we want to examine EventBus Output, register it
//to this class and pass the event back through our custom abstract class
@Subscribe
public void onReceiveEventBusEvent(DataTransfer event) {
assertNotNull(transferCallback);
transferCallback.onSuccess(event);
//notify latch so that we can proceed
latch.countDown();
}
}
mockBus nedir? –