我的任务是通过工具测试来测试抽象片段https://github.com/Mobile-Connect/android_sdk_v3/blob/develop/Application/src/main/java/com/gsma/mobileconnect/r2/android/demo/fragments/BaseAuthFragment.java。而且我完全不知道该怎么做。
我已经阅读了一些教程,但这是唯一的基础。.所以,现在我有一些想法:
所以,现在我有这样的结构:
@RunWith(AndroidJUnit4.class)
public class BaseAuthFragment_ExampleTest extends BaseAuthFragment{
@Override
public void onComplete(DiscoveryResponse discoveryResponse) {}
@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class);
private MainActivity mainActivity = null;
BaseAuthFragment fragment = null;
@Before
public void setUp() {
//MockitoAnnotations.initMocks(this);
mainActivity = mActivityRule.getActivity();
}
@After
public void setDown() {
mainActivity = null;
fragment = null;
}
@Test
public void useAppContext() throws Exception {
assertNotNull(mainActivity);
FragmentManager fragmentManager = mainActivity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragment = new BaseAuthFragment_ExampleTest();
MobileConnectAndroidView as = BaseAuthFragment.mobileConnectAndroidView;
fragmentTransaction.add(fragment, null);
fragmentTransaction.commit();
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
getActivity().getSupportFragmentManager().executePendingTransactions();
}
});
getInstrumentation().waitForIdleSync();
fragment.connectMobileDemo();
MobileConnectAndroidView as2 = BaseAuthFragment.mobileConnectAndroidView;
assertThat(as, is(as2));
}
}
我想在第一种方法的示例( connectMobileWithoutDiscovery )上解释我的想法:
所以,我只想知道我的想法是否正确。
答案 0 :(得分:1)
BaseAuthFragment是一个抽象片段,显然是要被子类化。在我看来,正确的测试将像您所做的那样涉及一个子类,但该子类可能应该是嵌套类或同一包的同级兄弟,而不是测试本身。这将为您提供一些有关将来对BaseAuthFragment进行更改是否需要更改子类的反馈,因为您已经创建了该测试子类。
大概是,您的被测片段可以跟踪已调用的方法(否则可能需要Mockito监视),并公开获取程序的状态,否则该方法将被隐藏,或者希望子类进行跟踪,否则您需要根据方法调用顺序进行推断。
此外,通过制作用于测试的Fragment(但这不是您的测试),您可以随意扩展有限可见性方法(protected
)的可见性。就是说,如果您遵循将测试与被测类放在同一程序包中的做法(可能位于不同的源文件夹中),则仍可以访问这些方法而无需更改可见性:protected
受保护程度较低而不是默认的包专用可见性级别。