簡體   English   中英

java.lang.RuntimeException:存根! 在Android中使用Mockito

[英]java.lang.RuntimeException: Stub! in Android with Mockito

我一直在Google上查找此錯誤,我發現的大多數答案都是將junit依賴關系移至頂部。 或使用另一個模擬框架。 我已經消除了依賴關系,但仍然失敗了,整個項目使用了模仿和powermock。

這是簡歷中的代碼。

package co.pack.session;

import com.google.gson.JsonObject;
import org.junit.Test;
import co.pack.Session.Organization;
import static org.junit.Assert.assertEquals;

public class TestOrganization {

@Test
public void testLoadJson() {
    JsonObject json = new JsonObject();
    json.addProperty("theme_color", "red");
    Organization organization = new Organization();

    organization.loadFromJson(json);

    assertEquals("red", Organization.getThemeColor());
    }
}

實作

public static void loadFromJson(JsonObject json) {
    Organization.name = json.has("name") ? json.get("name").getAsString() : "";
    Organization.image = json.has("image") ? json.get("image").getAsString() : "";

    printActualOrganization();
}

private static void printActualOrganization() {
    Log.i(TAG, "_name_ " + name);
    Log.i(TAG, "_image_ " + image);
}

它在日志行上失敗

Log.i(TAG, "_name_ " + name);

並得到這個

java.lang.RuntimeException: Stub!

at android.util.Log.i(Log.java:9)
at co.mobico.Session.Organization.loadJson(Organization.java:50)
at co.mobico.session.TestOrganization.testLoadJson(TestOrganization.java:28)

日志行,永遠不會在測試中引起任何錯誤,我不知道這種情況下發生了什么。

您可以嘗試將以下選項添加到您的應用程序build.gradle

android {

    testOptions {
        unitTests.returnDefaultValues = true
    }
}

這應該防止您收到此RuntimeException,因為在這種情況下,Android方法將返回默認值。 請注意,這可能會引起其他問題,例如,在使用TextUtils.equals(...)

基本上,我同意模擬被測單元的每個依賴關系的策略,但是您可以將返回值用作一種解決方法。

問題是您直接在模擬上調用方法。

您通常不這樣做。

通常,您會創建一個正常的被測類實例(剪切),並模擬與其通信的依賴項:

@Test public void exampleWithMocks(){
  // arrange
  DataTransferObject dto = new DataTransferObject();
  dto.setSomeProperty(SOME_PRIMITIVE_VALUE_OR_STRING);

  SomeServiceTheCutDependsOn dependency = mock( SomeServiceTheCutDependsOn.class);

  ClassUnderTest cut = new ClassUnderTest(dependency);

  // act
  Object result =  cut.doSomethingWith(dto);

  // assert
  assertThat(result,notNullValue());
  verify(dependency).expectedMethodCall(dto);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM