質問

私は珍しい状況にいます。を使ってエスプレッソを書くとき。私は、エスプレッソInstrumentationTestCaseをするものではありませんよろしくお願いします。

いリスナーを作成した授業を知ったので変更のある値です。使っているリスナーの私のテストスイート

私から値を取得しリスナーながらプレーする必要がありま主張する値に変更しました。

私の問題は、試験終了前を受けられま価値のスです。

    private void sendSpeedChanges() {
    setStaticSpeed(new Random().nextInt(10) + 2);
    try {
        runTestOnUiThread(new Runnable() {
            @Override
            public void run() {
                consoleActivity.onSpeedChanged(getStaticSpeed(), false);
            }
        });
    } catch (Throwable throwable) {
        throwable.printStackTrace();
    }

}

private void createSpeedDelegate() {
    EspressoMachineValues.setOnSpeedChangeListener(new EspressoMachineValues.OnSpeedChangeListener() {
        @Override
        public void onSpeedChanged(double speed) {
            //assert speed is correct.
            assertTrue(getStaticSpeed() == speed);
        }
    });

}

これらの方法を使用しています。の createSpeedDelegate() は呼び出します。その呼びかけ sendSpeedChanges.いこのX額ます。


注意:

  • 約200ミリ秒単位で取得する情報(平均).
  • できないコ sendSpeedChanges() まっての価値 onSpeedChange()
  • 利用できなくなりました。 Thread.sleep(); でのリスナーの主なねじになります。

していました を追加する getInstrumentation().wait(2000); とも getInstrumentation().waitForIdleSync(); 明らかにもならない。

の思い:

   for (int i = 0; i < 42; i++) {
        sendSpeedChanges();
        i++;
    }

でも、このことを待たない値にできないようにすること。とい場合、その値試験により、ランナーと考えるすべての試験を行い、終了します。

私の質問 が、それはどのように制御すべきかという場合、試験終了?でも私の試験 表示され 変わりました。

役に立ちましたか?

解決

ご試験を自分で作成する必要がありますの制御計算書続けることを試験走行していきます。

while(myTestNeedsToRun) {
    if(speedChangeReceived) {
        sendSpeedChange();
        speedChangeReceived = false;
    }
}

private void createSpeedDelegate() {
   EspressoMachineValues.setOnSpeedChangeListener(new EspressoMachineValues.OnSpeedChangeListener() {
    @Override
    public void onSpeedChanged(double speed) {
        //assert speed is correct.
        assertTrue(getStaticSpeed() == speed);
        speedChangedReceived = true;
    }
});

決まったら、きが完了した走行試験での設定 myTestNeedsToRun = false その後試験終了いたします。

他のヒント

少し大きをIdlingResourceを監視を高速になります。IdlingResourceのエスプレッソ用の検証のためのメインスレッドがアイドルはありませんAsyncTasksのAsyncTaskプールがあります。

てloookで coutingIdlingResource 貸出期間の延長はできません。ソースコード。きの実施のように感じます。このケースではこのようなこと:

[...]

private int mTargetSpeed;
private volatile ResourceCallback resourceCallback;

@Override
public boolean isIdleNow() {
  boolean isIdle = false;
  if (getStaticSpeed() == mTargetSpeed) {
     isIdle = true;
     resourceCallback.onTransitionToIdle();
  } else {
     isIdle = false;
  }

  return isIdle;
}

ご試験するためには、速達希望のレベルを行うと良いでしょう:

[...]
SpeedIdlingResource speedIdlingResource = new SpeedIdlingResource ("my_idling_resource");
Espresso.registerIdlingResources(speedIdlingResource);

このように、エスプレッソブロックでアイドリング資源をこの枠組みにおSpeedMonitor。ことになるgoodeいレバレッジのすべてのエスプレッソの同期の枠組みを監視す目標を達成しました速度で試験する信頼性の高いものを占めます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top