У меня есть фрагмент, написанный в Котлине. Я импортирую макеты с использованием
import kotlinx.android.synthetic.main.my_fragment_layout. *
В одном из моих методов в классе Fragment я устанавливаю текст для TextView в макете. Например:
fun setViews() { myTextView.text = "Hello" // In Java I would have used: // (getView().findViewById(R.id.myTextView)).setText("Hello"); }
В моем модульном тестировании Mockito я хочу протестировать этот метод. Например, если вышеописанный метод был написан в java, я мог бы протестировать следующее:
public void setViewsTest() { // Mock dependencies View view = Mockito.mock(View.class); TextView myTextView = Mockito.mock(TextView.class); when(fragment.getView()).thenReturn(view); when(view.findViewById(R.id. myTextView)).thenReturn(myTextView); // Call method fragment.setViews(); // Verify the test verify(myTextView).setText("Hello"); }
Как я могу сделать подобную реализацию, когда Fragment написан в Kotlin, и у меня есть импортированные представления, используя: import kotlinx.android.synthetic.main.my_fragment_layout.
Я думаю, что Robolectric – более подходящий инструмент для такого типа тестов. Используя его, вы можете иметь более простой способ протестировать код с зависимостями Android от JVM.
Например, тест будет выглядеть примерно так:
@Test fun `should set hello`() { val fragment = YourFragment() fragment.setViews() assertEquals(fragment.myTextView.getText().toString(), "Hello"); }