1

Я столкнулся с этим странным VerifyError при попытке запустить Robolectric тесты, которые называют ShinobiControls под капотом. Я пробовал вариант -noverify, но он, похоже, не работает, или я помещаю его в неправильное место.VerifyError с ShinobiControls и Robolectric

Я использую Retrolambda, Java 8, Robolectric (3.0) и Shinobi Premium (1.8.0).

java.lang.VerifyError: Expecting a stackmap frame at branch target 18 
Exception Details: 
    Location: 
    com/shinobicontrols/charts/ChartFragment.onResume()V @8: ifnull 
    Reason: 
    Expected stackmap frame at this location. 
    Bytecode: 
    0x0000000: 2ab7 000b 2ab4 0006 c600 0a2a b400 06b6 
    0x0000010: 0012 b1         

    at java.lang.Class.getDeclaredConstructors0(Native Method) 
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671) 
    at java.lang.Class.getConstructor0(Class.java:3075) 
    at java.lang.Class.newInstance(Class.java:412) 
    at android.app.Fragment.instantiate(Fragment.java:611) 
    at android.app.Fragment.instantiate(Fragment.java:582) 
    at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2108) 
    at android.app.Activity.onCreateView(Activity.java:5282) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:377) 
    at android.app.Activity.setContentView(Activity.java:2144) 
    at com.example.android.MainActivity.onCreate(MainActivity.java:132) 
+0

В каких версиях вы используете все эти компоненты (например, шинобихарты, роботы и ретроламба)? – safarmstrong

+0

Мы также используем shinobi, и мы издеваемся над представлением shinobi в тестах Robolectric –

+0

@safarmstrong Robolectric 3.0, Shinobi Premium 1.8.0 – SJoshi

ответ

0

В принципе, мы уклоняемся от взгляда синоби. Мы имеем следующую конструкцию:

public class ShinobyView { 
    @VisibleForTesting 
    @NonNull 
    protected ChartView getShinobiChart(@NonNull final LayoutInflator inflator, @NonNull final ViewGroup chartContainer) { 
     return inflater.inflate(R.layout.shinobi_chart, chartContainer, false); 
    } 

    @NonNull 
    public View createView(@NonNull context context) { 
     ... 
     ChratView view = getShinobiChart(inflator, container); 
     container.addView(view, <some layout params>); 
     ... 
    } 
} 

И в тесте подделать:

public class TestShinobyView { 
    @Override 
    @NonNull 
    protected ChartView 
    getShinobiChart(@NonNull final LayoutInflator inflator, @NonNull final ViewGroup chartContainer) { 
     return new View(activity); 
    } 
} 

Если вы хотите, чтобы убедиться, что вы также правильно настройки шиноби графики, то вам нужно издеваться ShinobiChart и не возвращаются View но подделать ShinobiView

+0

Спасибо Eugen! Значит, он не скомпилируется для вас? Являются ли эти классы в вашем тестовом каталоге? – SJoshi

+0

Он скомпилируется для нас. Верхний код - это производственный, а нижний - из тестов. –

+0

Не могли бы вы также показать, как вы раскрываете это в XML? Я хотел бы видеть, как наши реализации одинаковы/отличаются, поэтому я могу возиться. – SJoshi