gpt4 book ai didi

java - 使用 JUnit 测试 ServiceLocator

转载 作者:行者123 更新时间:2023-12-02 00:54:03 25 4
gpt4 key购买 nike

这是我的 previous question 的后续问题.

我正在尝试为我的 ServiceLocator 类编写测试用例,但它给了我以下错误:

com/iplanet/ias/admin/common/ASException
java.lang.NoClassDefFoundError: com/iplanet/ias/admin/common/ASException
at java.lang.ClassLoader.defineClass1(Native Method)

我的测试用例:

public void testServiceLocator () throws UivException, NamingException
{
DataSource ds = ServiceLocator.getInstance().getDataSource("jdbc/RSRC/my/mydb");
//I have not put any assert statements because i know above line is failing
}

上面的代码在 getInstance() 方法上失败,如下所示:

static public ServiceLocator getInstance() throws UivException {
try {
if (me == null) {
synchronized(ServiceLocator.class) {
me = new ServiceLocator();
}
}
return me;
}
catch (UivException e) {
throw new UivException(ErrorCode.SERVICE_LOCATOR_ERROR,
ErrorCode.SERVICE_LOCATOR_LOOKUP_ERROR,
e.getMessage());
}
}

我知道这个 ServiceLocator 工作正常,因为当我从前端测​​试我的应用程序时没有任何问题。我编写这个测试用例的唯一原因是我想测试我的 DAO 。对于我来说,测试我的 DAO ServiceLocator 必须能够工作(来自 JUnit )。

我不知道如何理解该错误消息。有人想建议我可以尝试的东西吗?

编辑:ServiceLocator 构造函数

private ServiceLocator() throws UivException  {
try {
ic = new InitialContext();
// System.out.println("Created the Initial Context");
cache = Collections.synchronizedMap(new HashMap());
}
catch (NamingException ne) {
throw new UivException(ErrorCode.SERVICE_LOCATOR_ERROR,
0, ne.getMessage());
}
catch (NullPointerException e) {
throw new UivException(ErrorCode.SERVICE_LOCATOR_ERROR,
0, e.getMessage());
}
}

最佳答案

实际上,错误非常清楚:java.lang.NoClassDefFoundError: com/iplanet/ias/admin/common/ASException 表明 ASException 的定义不能运行时发现。

当在应用程序服务器中运行时,此类由 iPlanet 应用程序服务器提供,并且代码运行良好。要在应用程序服务器上下文之外运行此代码,您必须通过将其放入类路径来“手动”提供它。因此,您必须将正确的 iPlanet JAR 添加到类路径中(这是棘手的部分,您必须找到哪个)。

此外,我可以看到您正在使用 InitialContext 非参数构造函数,因此您在应用程序服务器内运行时正在使用 iPlanet 的环境设置。在 iPlanet 之外(例如,对于单元测试),您必须自己为 iPlanet 提供正确的 JNDI 属性。为此,您必须在类路径上放置一个 jndi.properties 文件,其中包含(至少)初始上下文工厂和提供程序 URL。像这样的事情:

java.naming.factory.initial=...
java.naming.provider.url=...

检查您的 iPlanet 文档中的值。

关于java - 使用 JUnit 测试 ServiceLocator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1698585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com