当前位置: 首页 > 知识库问答 >
问题:

如何模拟自动化Android Studio UI Espresso测试套件的网络层响应?

陈哲
2023-03-14

Android Espresso UI测试与模拟改型API

模拟服务器请求Android Espresso UI测试

这是我最新的实验:

@get:Rule
    var activityRule = ActivityTestRule(MainActivity::class.java, true, false)

    @Before
    fun setup() {

    }

    @Test
    fun intent() {
        val intent = Intent()

        activityRule.launchActivity(intent.putExtra("UITesting", true))

        println(activityRule.activity.intent.extras)
    }

以下是改型实例:

var BASE_URL = "https://api.invoicehome.com"

class NetworkManager {

    private val service : networkService
    // initialization with BASE_URL, using Gson converter factory to decode ( i believe there are other options available as well)
    init {
        val retrofit = Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
        service = retrofit.create(networkService::class.java)
//    }
    }
 }

MainActivity开始,其中有NetworkManager的实例:

class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {

    private var networkManager = NetworkManager()
}

我想一些东西,可以简单地围绕着改型的实例,并弹出一个URL,但我99%肯定这是不现实的。如果有任何swift开发人员在研究这个问题,我希望找到与Swifter类似的功能

那么,我能以某种方式为改型实例设置URL条件吗?在这些旗子里我该从哪里经过?有没有一个我缺少的图书馆可以为我做所有这些?

共有1个答案

龚伯寅
2023-03-14

可以使用MockWebServer库的帮助

您需要抽象NetworkManager类,并生成两个不同的实现,一个用于模拟请求,另一个用于生成实际请求,并将其作为活动的依赖项提供。

例如:

NetworkManager接口

interface NetworkManager {

    fun doRequest()
}

模拟实现

class MockedNetworkManager : NetworkManager {

    override fun doRequest() {
        // Mock request
    }
}

真实实现

class RealNetworkManager : NetworkManager {

    override fun doRequest() {
        // Real request
    }
}
class MainActivity : AppCompatActivity() {

    private lateinit var networkManager: NetworkManager

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val shouldMock = intent.getBooleanExtra("UITesting", false)
        if (shouldMock) {
            networkManager = MockedNetworkManager()
        } else {
            networkManager = RealNetworkManager()
        }
    }

}
 类似资料:
  • 一面电话 自我介绍,项目介绍 关于你的项目进行的测试 压力测试的了解 为什么项目不进行性能测试 你最喜欢的游戏? 王者荣耀的一个英雄的技能点进行测试用例的书写 你在王者中遇到过哪些bug,进行下原因分析 为什么想做测试,自己性格为什么适合 自己为了测试进行过哪些学习 你了解SQL,Linux吗(了解,就没深问) 面完直接就说过了等二面通知,一面还是比较基础的 小哥哥说那我们的面试就到这里结束啦,谢

  • 问题内容: 通常的问题是如何模拟(作为一组测试用例的一部分)缺乏网络连接,因为这是某些测试用例中的重要考虑因素。有没有一种方法可以通过Java API(或通过JVM选项)来执行,以便某些测试用例可以在网络断开的情况下运行?(模拟还是真实?)。 更具体的情况(如果没有普遍适用的解决方案)是我正在做大量的XML文件处理(包括XSD验证),并且我需要确保没有从网络上获取任何内容,特别是属性值(提示)未使

  • 英文原文:http://emberjs.com/guides/testing/test-runners/ 当运行测试时,可以在很多种不同的方案里选取最适合工作流的方案。找到一种摩擦最低的运行测试的方案非常重要,因为测试是一项经常要做的事情。 浏览器 运行测试的最简单的方法是直接在浏览器中打开页面。下面将展示如何加入一个qunit的测试harness给应用,并可以针对其运行测试: 首先,从这里获取一

  • 我正在尝试测试一个函数,该函数调用条带api。我使用junit作为我的测试库,mockito作为我的模拟库。这里的问题是是一个静态方法,而mockito不支持模拟静态方法。 我试过像这样模拟类。 这只会导致一个Stripe身份验证异常,因为我从未给Stripe一个API密钥。 在Java中模拟Stripe api调用进行测试的正确实现是什么?我好像找不到这方面的任何信息。

  • 自动化测试 如果你想构建可靠的高质量的软件,自动化测试将是你工具箱里面非常关键的一个部分,它帮助你减少手工测试的代价,提高你的开发小组重构已有代码的能力。 自动化测试的类型  并非所有的自动化测试都是相似的,他们通常在作用域、实现方式和执行时间上有所差异,我把他们分成三种类型的测试:单元测试、集成测试和功能测试。 单元测试用于测试你代码的最小单元,在基于java的项目中这个单元就是一个方法(met

  • 传统的接口自动化测试成本高,大量的项目没有使用自动化测试保证接口的质量,仅仅依靠手动测试,是非常不可靠和容易出错的。 YApi 为了解决这个问题,开发了可视化接口自动化测试功能,只需要配置每个接口的入参和对 RESPONSE 断言,即可实现对接口的自动化测试,大大提升了接口测试的效率。 第一步,测试集合 使用 YApi 自动化测试,第一步需要做得是创建测试集合和导入接口,点击添加集合创建,创建完成