unit-testing - 测试时模拟 Gradle 插件使用的类

标签 unit-testing gradle mocking gradle-plugin

我正在编写一个与外部 HTTP API 交互的 Gradle 插件。此交互由单个类处理(我们称之为 ApiClient)。我正在编写一些使用 Gradle TestKit 来模拟使用该插件的整个构建的高级测试,但我显然不希望它们实际访问 API。相反,我想模拟 ApiClient 并检查其方法是否已使用适当的参数调用,但我不确定如何将模拟版本实际注入(inject)插件。该插件在 Gradle 的某个深处实例化,并使用其 void apply(Project project) 方法应用于正在执行的项目,因此似乎没有办法注入(inject) MockApiClient 对象。

也许一种方法是手动实例化一个 Projectapply() 插件到它(此时,我可以注入(inject)模拟对象,因为我可以控制插件实例化),然后以编程方式在项目上执行任务,但我该怎么做?我已阅读 Gradle API 文档,但没有看到明显的方法。

最坏的解决方案是通过插件扩展配置传递一个调试标志,然后插件将使用它来确定它是否应该使用真正的ApiClient 或模拟(它会将一些易于 grep 的消息打印到 STDOUT)。不过,这并不理想,因为它比检查实际传递给 ApiClient 方法的参数更加模糊。

最佳答案

也许你可以把你的插件分成几个不同的插件

  • my-plugin-common - 所有常见的东西
  • my-plugin-real-services - 将“真实”服务添加到模型(例如 RealApiClient)
  • my-plugin-mock-services - 向模型添加“模拟”服务(例如 MockApiClient)
  • my-plugin - 应用 my-plugin-real-servicesmy-plugin-common
  • my-plugin-mock - 应用 my-plugin-mock-servicesmy-plugin-common

在现实世界中,人们只会apply: 'my-plugin'

要进行测试,您可以应用:'my-plugin-mock'

关于unit-testing - 测试时模拟 Gradle 插件使用的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45216315/

相关文章:

android - 如何在新Gradle中配置产品 flavor

android - 如何从 android shrinkResources 中排除资源?

wpf - 单元测试 WPF GUI 框架

java - 模拟静态方法调用时发生意外调用

javascript - 如何确定 Controller 在angularJS的全局命名空间上可用

unit-testing - 具有副作用的 F# UnitTesting 函数

javascript - 开 Jest : How should I mock a class function?

unit-testing - 如何对 webrtc 应用进行单元测试?

java - Gradle 是否应该从 mavenLocal() 为每个项目制作 JAR-s 的本地副本?

python - python 中的严格模拟