0

我需要一些与 Android 应用程序的 TDD 相关的建议和指导

我正在开发一个复杂的 android 应用程序(用于网络游戏的自动机器人播放器)。现在我有一个试点,在开始继续开发之前,我想为它制作完整的 TDD。

此应用程序的主要目的是作为与 http 服务器通信的后台服务运行 - 它将发送带有 json 内容的 http 请求

它有两种运行模式:

- service mode - it will run in background- read some data configuration from database and communicate with the server 
- GUI mode - communication with server on demand + configuration for running in service mode.

GUI 层被设计为 MVP,因此在一个模块(MVP 单元)中完成的所有业务都与视图分离,因此,所有应用程序逻辑都是“非 android 依赖”。

我有几个大层需要对其进行单元测试:

- domain data access : 
      database storage (ormlite)
      android specific storage - shared prefs.., 
      files
- server communication - http client (spring android rest template)
                         http content conversion (gson)

- background services - android services
- GUI - activities
- app business - android independent - algorithms, computations, ...

总之,将需要 TDD - 对这些层中的每一层单独进行测试,还需要对完整流程进行集成测试。

测试包括:

  - database DAO tests
  - http client requests 
  - GSON conversion TDDs
  - business logic - simple tests for methods
  - unit testsfor running and scheduled background services
  - activity unit testing
  - test suites (service + DAO + json conversion + http requests)

我的第一个问题是哪种 TDD 框架最适合我的需求?我应该使用模拟还是不使用?

请给我一些方向。谢谢

4

2 回答 2

2

首先,用于自动测试:junit


对于流畅的断言,您可以查看fest-assertions他们在这里提供了很多示例。但是在以下位置享受这个String

 assertThat("Frodo").startsWith("Fro").endsWith("do").hasSize(5);

它不仅和谐,还能提高您的工作效率。


由于您想编写单元测试,因此您必须编写mock对象。当然,你可以在没有任何框架的情况下做到这一点,但它非常 tedious.

个人而言,我是Mockito的忠实粉丝。它的api很棒而且非常流畅。此外,您可以使用BDDMockito静态方法以BDD方式编写测试。看 :

//given  
given(seller.askForBread()).willReturn(new Bread());
//when
Goods goods = shop.buyBread();
//then
assertThat(goods, containBread());

有时你会依赖于你不能模拟的类,例如final classlike BluetoothAdapter。在这些情况下(并且仅在这些情况下),您可以使用PowerMock.

也看看这个东西:

还有一本书:Android应用测试指南

于 2012-08-31T15:18:50.307 回答
0

既然您提到了集成测试,您可能还会对RoboGherk作为我的朋友在 LeanDog 的朋友最近宣布的Android 自动化验收测试框架感兴趣。

于 2012-08-31T15:29:21.053 回答