不可访问的功能似乎是一个公共功能

时间:2018-06-14 18:45:05

标签: java scala auth0

我们正在整合到Auth0 API中,作为整个混乱的一部分,我们有一个将UserInfo(从Auth0 lib)转换为我们自己的case类的函数。

此功能的签名是:

private[services] def convertUserInfoToAuth0UserInfo(userInfo: UserInfo): Auth0UserInfo

我正在尝试为此函数创建单元测试,对于设置,我需要创建UserInfo对象并用数据填充它。

val profileMap = Map(
          "email" -> "name@email.com",
          "username" -> "username",
          "organizationName" -> "organizationName",
          "avatarUrl" -> "avatarUrl",
          "domains" -> List("domain.com"),
          "access_token" -> "access_token"
      )

      val userInfo = new UserInfo()
      userInfo.setValue("key", profileMap.asJava)

      val auth0UserInfo = service.convertUserInfoToAuth0UserInfo(userInfo)

      auth0UserInfo.accessToken must beSome("access_token")

问题是setValue函数无论出于何种原因都无法访问,即使UserInfo类本身如下所示:

package com.auth0.json.auth;

import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;

import java.util.HashMap;
import java.util.Map;

/**
 * Class that holds the Information related to a User's Access Token. Obtained after a call to {@link com.auth0.client.auth.AuthAPI#userInfo(String)},
 * {@link com.auth0.client.auth.AuthAPI#signUp(String, String, String)} or {@link com.auth0.client.auth.AuthAPI#signUp(String, String, String, String)}.
 */
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class UserInfo {

    private Map<String, Object> values;

    UserInfo() {
        values = new HashMap<>();
    }

    @JsonAnySetter
    void setValue(String key, Object value) {
        values.put(key, value);
    }

    /**
     * Getter for the values contained in this object
     *
     * @return the values contained in the object.
     */
    @JsonAnyGetter
    public Map<String, Object> getValues() {
        return values;
    }
}

除非我遗漏了某些内容,否则setValues是公开的。 为什么我不能使用它?

1 个答案:

答案 0 :(得分:1)

即使该类为public,默认情况下,该方法没有access-modifier关键字:

void setValue(...) \\Package-Private

由于您不拥有该软件包,因此无法以这种方式使用UnitTest。此外,技术上进入了集成测试的领域。

使用注入或环境变量来控制使用哪个类的正确方法是设置一个模拟环境。