【问题标题】:Unable to mock local objects in method using Spock无法使用 Spock 在方法中模拟本地对象
【发布时间】:2021-11-20 12:27:25
【问题描述】:

我无法模拟以下本地对象 - envservicecreds。这些是来自导入的 Cloud Foundry 依赖项的类。

如何使用SpockJunit 4在不重构代码的情况下编写涵盖Groovy 以下代码的所有条件的测试用例

import io.pivotal.cfenv.core.cfEnv
import io.pivotal.cfenv.core.cfCredentials
import io.pivotal.cfenv.core.cfService

class Test {
    public String getPropertyValue() {
        CfEnv env = new CfEnv();
        CfService service = new CfService();
        String propName = "test-name";
        try {
            service = env.findServiceByName(propName);
        } catch (Exception e) {
            return null;
        }
        CfCredentials creds = new CfCredentials();
        Map<String, Object> props = service.getMap();
        return props.get("prop.name").toString();
    }
}

【问题讨论】:

  • 你测试的生产代码是Java还是Groovy?
  • @Leonard,这是 Groovy

标签: groovy mocking junit4 spock


【解决方案1】:

由于您的代码是 Groovy,您可以使用 Spock 的 GroovySpydocs

例如:

class ASpec extends Specification {
  def "getPropertyValue() return null when env.findServiceByName throws an exception"() {
  given:
  CfEnv envMock = GroovySpy(global: true)

  when:
  def result = new Test().getPropertyValue()

  then:
  result == null
  1 * envMock.findServiceByName(_) >> { throw new RuntimeException() }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 2011-09-25
    • 2021-09-17
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    相关资源
    最近更新 更多