В настоящее время я немного озадачен Intent
. Я знаю, что так называемые дополнительные функции - это Bundle
, а Bundle
- это внутренняя карта.Простое намерение - тест jUnit не удается
И если я что-то помещу на эту карту, с intent.putExtra("someName", "someValue");
, я ожидаю, что на карте есть ключ, называемый «someName». Но это не так, согласно моему очень простому единичному тесту.
public void testIntent(){
assertTrue("true != true", true);
assertFalse("false != false", false);
final String extraName = "IamAnExtra";
final String extraValue = "IamAValue";
Intent intent = new Intent();
intent.putExtra(extraName, extraValue);
assertTrue("hasExtra==false", intent.hasExtra(extraName));
}
Теперь тыс результаты в следующем:
junit.framework.AssertionFailedError: hasExtra==false
Какая магия происходит за умысел-кода? Я знаю, что он нормально работает. Является ли карта кэшированной и написанной только в том случае, если я отправляю намерение? Заранее спасибо!
Edit:
Я добавил строку assertNotNull("extras == null", intent.getExtras());
которая также терпит неудачу.
И я проверил код из методов putExtra
и getExtras
, который является:
public Intent putExtra(String name, String value) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putString(name, value);
return this;
}
и
public Bundle getExtras() {
return (mExtras != null)
? new Bundle(mExtras)
: null;
}
Так что, если mExtras член имеет нулевое значение, то нуль возвращается для getExtras. Но putExtra создаст новый экземпляр Bundle для mExtras
, поэтому mExtras
должен не быть пустым. Я смущен.
Вы используете его как _unit test_ или как _инструментированный тест_? И какие рамки вы используете, JUnit 4? – josemigallas
единичный тест. Я использовал обычную TestCase. – JacksOnF1re
Я думал, что использование простого намерения можно использовать с хорошим старым блоком, не так ли? Я не собираюсь пытаться отправить его или что-то еще. – JacksOnF1re