0

我一直在使用新的Android應用程序架構組件。關於測試的文檔留下了許多想象。我看過android architecture components testing部分文檔,其含義非常模糊。如何爲Android App體系結構ViewModels創建Android UI測試?

用戶界面&相互作用:這將是您唯一需要進行Android UI Instrumentation測試的時間。測試用戶界面代碼的最佳方法是創建一個Espresso測試。 您可以創建片段併爲其提供模擬ViewModel。由於該片段只與ViewModel對話,因此嘲笑它將足以完全測試此UI

如何通過將ViewModel的模擬傳遞給片段來編寫Espresso測試?我也看了谷歌提供的示例應用程序,他們也不是很有幫助。

假設這是我的示例片段類。

public class ExampleFragment extends LifecycleFragment { 
    private ExampleViewModel mViewModel; 
    @Inject ExampleViewModelFactory mViewModelFactory; 

    public ExampleFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) {   
     return inflater.inflate(R.layout.fragment_example, container, false); 
    } 

    @Override 
    public void onActivityCreated(@Nullable final Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    ExampleComponent component = DaggerExampleComponent.builder().build(); 
    component.inject(this); 
    mViewModel = ViewModelProviders.of(this, mViewModelFactory).get(ExampleViewModel.class); 
    mViewModel.getExampleString().observe(this, exampleString -> { 
     //Update UI 
     });   
    } 
} 

回答

0

關於提供模擬注入組件的AFAIK有兩種主要方法。 第一個是在google examples中實現的,它提供了一個模擬視圖模型實現作爲不同的風格(例如在您的測試中)。

另一個在「測試視圖」部分中描述in my blogpost here,其中DaggerExampleComponent由應用程序對象提供,並且在espresso測試運行器中覆蓋應用程序對象,其中一個提供了假ViewModel。

Full working example here