我正在用两个应用程序做project:android应用程序(客户端)和rest服务(服务器)。我的android应用程序消耗了我的rest服务。
这两个应用程序都是单独测试的,以确保它们按照预期完成业务。在服务器测试期间,我准备请求并检查服务器响应。在客户机测试期间,我设置了一个简单的http模拟服务器,并针对不同的模拟响应测试客户机的请求。
现在,这个技术很管用。它给了我一种我喜欢的灵活性。我可以使用不同的测试框架和持续集成环境。但有一个弱点。在两个(客户端和服务器)测试用例中,我指定了相同的API。我假设例如。
GET /foo-list.json
将返回带有json的HTTP 200
[{
id: 1,
name: foo1,
}, {
id: 2,
name: foo2
}]
所以我重复一遍。如果我改变一个响应格式,我的客户端测试就不会失败。
我的问题是关于测试这类场景的良好实践。如何在不牺牲独立测试灵活性的前提下做出真正的集成测试。我应该用模拟服务器还是用rest服务的真实实例测试客户端?
请分享您的职业经验。
在您的场景中,您应该继续编写单元测试来测试单个类,并编写集成测试来测试多个应用程序层(例如,业务层和数据库层)之间的互操作。
你问:
“如何在不牺牲独立测试灵活性的前提下做出真正的集成测试”
您的所有代码都应该使用抽象,这样您就可以使用模拟依赖项在完全隔离的情况下使用依赖项注入单元测试类。模拟的使用将确保这些测试保持独立,即不耦合到任何其他类。因此采用这种方法,将使用最终具体类的集成测试将不会影响使用模拟类的单元测试。
还有:
“我应该使用模拟服务器还是使用rest服务的真实实例测试客户端?”
除了单元和集成测试之外,您还应该执行客户机-服务器集成测试;我使用自动化验收测试来完成此操作。使用Cucumber这样的测试框架(也可以查看calabash-android,它是专门为测试移动应用程序而编写的),您可以编写测试,测试与客户端(您的Android应用程序)和服务器(您的RESTful服务)交互的特定特性和场景。这些客户机-服务器集成测试将启动和停止客户机和服务器的具体实例。
在客户机-服务器体系结构中,当模拟客户机和模拟服务器时,最好的方法是什么。我理解单元测试应该只测试给定的类,每个依赖对象都被模拟,而集成测试应该测试整个特性。当谈到API调用时,我感到困惑的是,我应该模拟用于API调用的客户机,还是应该使用一些服务器模拟框架,让真正的客户机调用模拟服务器。 在这种情况下,我应该(不是强制性的)测试我是否使用了正确的API url、正确的方法以及在查询参数或请求正文
如何模拟集成测试所需的许多依赖关系? 我使用Mockito进行纯单元测试。在这种情况下,Pure意味着测试一个类,嘲笑它的所有依赖关系。漂亮。 现在是集成测试。假设在这种情况下,集成测试将测试以下内容: 消息被放入队列 我们也可以说,在第2步中发生的处理是严肃的事情。它依赖于大量的数据库交互、多种外部服务、文件系统,以及各种各样的东西。流还会引发很多副作用,所以我不能简单地确保响应是正确的——我需
情况和问题:在Spring Boot中,我如何将一个或多个模拟类/bean注入应用程序以进行集成测试?在StackOverflow上有一些答案,但它们集中在Spring Boot 1.4之前的情况,或者只是不适合我。 背景是,在下面的代码中,设置的实现依赖于第三方服务器和其他外部系统。设置的功能已经在单元测试中测试过了,所以对于完整的集成测试,我想模拟出对这些服务器或系统的依赖,只提供虚拟值。 M
问题内容: 我有一个ParseService,我想对其进行模拟以测试使用它的所有控制器,我一直在阅读有关茉莉花间谍的信息,但对我来说仍然不清楚。谁能给我一个关于如何模拟定制服务并在Controller测试中使用它的示例吗? 现在,我有一个使用服务插入书的控制器: 服务是这样的: 到目前为止,我的测试如下所示: 现在测试失败: 我做错了什么? 问题答案: 我做错的是没有在beforeEach中将模拟
在用注释并使用)运行的Spring启动集成测试中,我可以通过 restTemplate和将真正的http post调用放到我的rest控制器。 这工作正常,就在控制器的末端 -
我们有一些传统的laravel项目,它们在类中使用正面。 我们最近的项目使用了底层laravel类的依赖注入,facades所代表的类正如Taylor Otwell自己所暗示的那样。(我们对每个类使用构造函数注入,但为了保持示例简短,这里我使用方法注入并使用单个类。) 我知道外表是可以被嘲笑的 这对单元测试很有效。我试图理解的问题是,这些门面是否被“全球”嘲笑。 例如,让我们假设我正在编写一个集成