永发信息网

如何使用Mock来测试Files,Database和ContentProviders

答案:1  悬赏:10  手机版
解决时间 2021-03-23 06:51
如何使用Mock来测试Files,Database和ContentProviders
最佳答案
首个先我们创建一个应用,功能很简单就是读取该应用目录下的一个txt文件内容,并展示到应用的activity上。
  public class MockContextExampleActivity extends Activity {
  public final static String FILE_NAME = “myfile.txt”;
  private TextView mTv;
  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  mTv = (TextView) findViewById(R.id.TextView01);
  final byte[] buffer = new byte[1024];
  try {
  final FileInputStream fis = openFileInput(FILE_NAME);
  final int n = fis.read(buffer);
  mTv.setText(new String(buffer, 0, n-1));
  } catch (Exception e) {
  mTv.setText(e.toString());
  mTv.setTextColor(Color.RED);
  }
  }
  //这里写了个getText方法,测试工程会用到。
  public String getText() {
  return mTv.getText().toString();
  }
  运行一下,此时我们的包目录下没有myfile.txt,页面显示的可能是个错误。OK,然后我们创建两个文件。一个名为myfile.txt,一个test.myfile.txt。前者用于应用中显示的文件内容,后者是作为测试Mock调用的。
  echo “This is real data” >data/data/com.example.aatg.mockcontextexample/files/myfile.txt
  echo “This is *MOCK* data” >data/data/com.example.aatg.mockcontextexample/files/test.myfile.txt
  再次运行下,应该可以看到Activity上显示的是This is real data。
  OK,下面开始编写测试代码。我们的目的是测试这个app能够正确读取文件,假设现在我怕是不是开发在代码里写死了“This is real data”这句话(作为测试,有点怀疑精神很正常)。OK,现在我用另外一个文件test.myfile.txt来代替myfile.txt会不会出错。
  public class MockContextExampleTest extends ActivityUnitTestCase {
  private static final String PREFIX = “test.”;
  private RenamingDelegatingContext mMockContext;
  public MockContextExampleTest() {
  super(MockContextExampleActivity.class);
  }
  @Override
  protected void setUp() throws Exception {
  super.setUp();
  mMockContext = new RenamingDelegatingContext(getInstrumentation().getTargetContext(), PREFIX);
  mMockContext.makeExistingFilesAndDbsAccessible();
  }
  @Override
  protected void tearDown() throws Exception {
  super.tearDown();
  }
  public void testSampleTextDisplayed(){
  setActivityContext(mMockContext);
  startActivity(new Intent(), null, null);
  final MockContextExampleActivity mActivity = getActivity();
  assertNotNull(mActivity);
  String text = mActivity.getText();
  assertEquals(“This is *MOCK* data”, text);
  }
  }
  主要看下RenamingDelegatingContext函数的使用,PREFIX是表示文件或数据库的前缀。另外这里为什么使用getTargetContext方法而不是getContext,后者我们经常在UiTest中使用到。这里其实看下注释就明白了:
  //getContext():The instrumentation’s package context.
  //getTargetContext(): A Context in the target application.
  运行下测试,pass。这说明getText方法返回的string已经是This is *MOCK* data 而不是 This is real data了。这我就可以证明,开发没有写死这段话。以上就是RenamingDelegatingContext函数如何来mock文件的,数据库的使用也是一样的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
今天早上重新启动了路由器,结果上不了网了,
公司新店开张祝福语,新店开业用LED标语怎么写
严重的抑郁症会不会痊愈 正常后会不会再犯
汉庭酒店南极街店地址在哪,我要去那里办事
北京爱情故事的背景音乐,是以女生“啊”的哼
单选题关于安培力、磁感应强度的有关说法正确
角可以加什么偏旁
伦字开头成语大全
绍兴到上海 动车不动车的都行
酷狗如何剪辑合并音乐,酷狗7如何把两个歌曲合
安安国际集团有限公司怎么样?
兴隆汽修怎么去啊,有知道地址的么
周800年有几位王
判断题我班同学的平均身高是1.35米,每个同学
顺德大良步行街附近有什么好吃不贵的美食?
推荐资讯
x除以60 0点4=4点九用解方程计算
名门贵妻txt全文和番外
单选题英国杰出的浪漫主义文学家有①雨果②大
为什么家里的家私会有蛀木虫在里面呢?经常在
夏天,城市内的气温往往比郊外高出几度,这种
平昌哪里房子最好,新房
张掖市金视广告传媒有限公司地址有知道的么?
864除以54列竖式计算
爱不将就的上一句,枯木逢春犹再发的下一句?
220V的电压人触电后多长时间才会有生命危险?
java编程遇到问题
求一个带有“亲”字的网名
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?