我的Android应用程序通过REST API与后端服务进行通信。我想嘲笑这个API来快速开发前端。 我使用android volley作为客户端网络库。
答案 0 :(得分:7)
您可以使用dependency injection设计模式。
基本上,您指定的接口定义了一组与REST后端中的查询相对应的方法,例如:
interface DataSupplier {
// Lookup user by ID
User getUser(int id);
// Get all blog posts posted by a specific user.
List<BlogPost> getUsersBlogPosts(int userId);
}
现在,在需要查询后端的类中,指定一个注入器。这可以通过多种方式完成(例如构造函数注入,setter注入 - 有关更多详细信息,请参阅wiki文章)。使用注入器可以将依赖项的实现注入依赖于它的类中。我们假设您使用构造函数注入。使用后端的类看起来像这样:
public class DependentClass {
private final DataSupplier mSupplier;
public DependentClass(DataSupplier dataSupplier) {
mSupplier = dataSupplier;
}
// Now you simply call mSupplier whenever you need to query the mock
// (or - later in development - the real) REST service, e.g.:
public void printUserName() {
System.out.println("User name: " + mSupplier.getUser(42).getName());
}
}
然后创建DataSupplier的模拟实现:
public class MockRestService implements DataSupplier {
@Override
public User getUser(int id) {
// Return a dummy user that matches the given ID
// with 'Alice' as the username.
return new User(id, "Alice");
}
@Override
public List<BlogPost> getUsersBlogPosts(int userId) {
List<BlogPost> result = new ArrayList<BlogPost>();
result.add(new BlogPost("Some Title", "Some body text"));
result.add(new BlogPost("Another Title", "Another body text"));
result.add(new BlogPost("A Third Title", "A third body text"));
return result;
}
}
并使用它来实例化您的依赖类:
DepedentClass restClient = new DepedentClass(new MockRestService());
现在您可以使用restClient
,因为它已连接到您的实际后端。它只会返回可用于开发前端的虚拟对象。
当您完成前端并准备好实现后端时,您可以通过创建DataSupplier
的另一个实现来实现此目的,该实现设置与REST后端的连接并查询它以查找真实对象。我们假设您将此实现命名为RestService
。现在,您可以使用MockRestService
构造函数替换创建RestService
的构造函数,如下所示:
DepedentClass restClient = new DepedentClass(new RestService());
而且你拥有它:通过交换单个构造函数,您可以将前端代码从使用虚拟对象更改为使用真正的REST交付对象。
您甚至可以根据应用程序的状态(调试或发布)创建调试标志并创建restClient
:
boolean debug = true;
DependentClass restClient = null;
if (debug) {
restClient = new DepedentClass(new MockRestService());
} else {
restClient = new DepedentClass(new RestService());
}
答案 1 :(得分:1)
我最近创建了RESTMock。它是一个用于在Android测试中模拟REST API的库。它可以在开发过程中使用。您需要在github上的README之后进行设置,并创建一个基本的Android Instrumentation测试,它将启动您的应用程序并且不执行任何操作。这样,应用程序就可以在后台使用模拟服务器启动。
示例测试:
public class SmokeTest {
@Rule public ActivityTestRule<MainActivity> rule = new ActivityTestRule<MainActivity>(
SplashActivity.class,
true,
false);
@Test
public void smokeTest() throws InterruptedException {
rule.launchActivity(null);
Thread.sleep(10000000);
}
}