0

我开发了一个带有登录屏幕的小应用程序,还编写了一些 Espresso 脚本来实现自动化。

我知道 WireMock 是一个灵活的库,用于存根和模拟 Web 服务。借助它可以创建实际的 HTTP 服务器,以便您的测试代码可以连接到真正的 Web 服务。

现在我想在wiremock的帮助下开发登录屏幕的Web服务。我已经浏览了这里提供的详细信息, 但描述太技术性了。如果有人有任何教程、参考或想法如何做同样的事情,那就太好了。

我正在使用以下工具。

  • 安卓工作室
  • 浓咖啡
  • Gradle 构建工具
4

3 回答 3

1

免责声明:我是一名 java 开发人员,从未在 android 上开发过。

这真的是你想做的吗?为什么不将你的 web 服务调用包装在一个带有接口的类中呢?(使用jaxrs或类似的)。然后测试会简单得多,因为您可以模拟一个普通的旧界面(使用mockito或类似的)。

这种方法的好处是,如果 Web 服务接口以不兼容的方式更改(因为测试将不再编译),测试将“快速失败”。

与模拟接口相比,一直模拟 http 请求/响应听起来很冗长且难以维护。

于 2015-09-18T08:37:06.020 回答
0

您可以像这样从验收单元测试中运行wiremock:

@Rule
public WireMockRule wireMockRule = new WireMockRule(options().port(PORT).notifier(new ConsoleNotifier(true)));

@Rule
public ActivityTestRule<T> activityRule = new ActivityTestRule<T>(type) {
        @Override
        protected void beforeActivityLaunched() {
            stubFor(get(urlPathEqualTo("/myUrl"))
            .willReturn(aResponse()
                    .withStatus(200)
                    .withBody("{ 'status': 'OK' }")));
        }
    };

@Before
public void before() {
    activityRule.getActivity();
}

@Test
public void test() {
    // using espresso trigger the call on your activity
}

我假设你有浓缩咖啡,你知道如何使用它。请注意,存根必须在 beforeActivityLaunched 方法中,否则如果活动在启动时进行一些调用,那么存根还没有准备好。

于 2016-10-14T08:35:47.810 回答
-1

我想补充以前的答案并建议使用Wiremock JAX-RS(免责声明:我是作者)。如果您使用 JAX-RS 表达您的接口,它允许您自动化存根。

它添加了WireMockJaxrs.invocation(...)这样使用的方法:

final List<ItemDTO> responseObject = Arrays.asList(new ItemDTO("pong"));
final StubMapping sm =
    stubFor( //
        invocation(ItemResouce.class, (r) -> r.getItems()) //
            .willReturn(aResponse().withStatus(SC_ACCEPTED), responseObject));
于 2019-04-23T17:28:03.897 回答