java - 如何使用 ejp 无状态本地类在测试类中模拟私有静态 java.util.prefs.Preferences
问题描述
我想使用 mockito 编写测试类来测试带接口的无状态本地 ejb。
public class SampleHandler{
private static final Logger logger = Logger.getLogger(TLDHandler.class);
@EJB
private IMsAgent msAgent;
public void setMsAgent(IMsAgent msAgent) {
this.msAgent = msAgent;
}
public infoAvailability checkInfoAvailable(String sample){
final URI url = msAgent.buildUrl(API_PREPEND_URL + sample + "/check");
}
}
@Stateless
@Local({IMsAgent.class})
public class MsAgentImpl implements IMsTokenAgent {
private static final String API_BASE_URL_PROPERTY_NAME = "API_BASE_URL";
private static final String DEFAULT_API_BASE_URL = "https://stage.url.com/v1";
private static Preferences preferences = Preferences.systemNodeForPackage(MsAgentImpl.class);
@Override
public URI getBaseUrl() {
return URI.create(preferences.get(API_BASE_URL_PROPERTY_NAME, DEFAULT_API_BASE_URL));
}
}
我的测试班
@RunWith(MockitoJUnitRunner.class)
public class sampleTest {
@Mock
IMsAgent msAgent;
@InjectMocks
private SampleHandler sampleHandler = new SampleHandler();
@Before
public void setUp() {
sampleHandler.setMsAgent(Mockito.mock(MsAgentImpl.class));
}
@Test
public void checkInfoTest() throws Exception {
final infoAvailability response = sampleHandler.checkInfoAvailable("sample");
}
}
当我从 sampleTest 类控件运行 checkInfoTest 方法时,将转到 SampleHandler 类。在那个类中 url 变量总是返回空值。调试我的代码后,它永远不会转到 MsAgentImpl.getBaseUrl 方法。
解决方案
推荐阅读
- symfony - Bazinga 翻译包返回键
- flutter - 安装 Zefyr(Flutter) 时出错找不到方法:'SystemNavigator.routeInformationUpdated'
- sql - 如何使用 FOR JSON AUTO 从 SQL SERVER 中的变量创建 JSON
- javascript - 如何设置 WebSocket.send() 的块大小?
- html - 隐藏选择框
- python - OSError:无法加载共享对象文件:llvmlite.dll(SHAP 相关。可能缺少什么?)
- python - 如何将具有重复系列值的列添加到数据框中?
- graphql - Strapi Graphql 深度排序
- javascript - 防止刷新提交并在提交后清除输入
- mysql - 尝试在MYSQL中使用Insert On Duplicate Key更新命令,但是一张表没有PK