当前位置: 首页 > 面试题库 >

如何使用Junit 5测试服务提供商实施模块?

程胤运
2023-03-14
问题内容

这是我的基本模块,需要myspi包中定义的接口的实现。各种提供程序都可以提供MyProvider实现。基本模块通过myspi.MyProvider接口实现使用它们。

module base {
    exports myspi;
    uses myspi.MyProvider;
}

这是我的示例实现模块,该模块为MyProvider实现提供MyProviderImpl

module myspi.provider {
    provides myspi.MyProvider with myspi.provider.MyProviderImpl;
}

当我在基本模块中加载实现时,所有这些工作正常

public static List<MyProvider> getMyProviders() {
        var myProviders = new ArrayList<MyProvider>();
        for (MyProvider myProvider : ServiceLoader.<MyProvider>load(MyProvider.class)) {
            myProviders.add(myProvider);
        }
        return myProviders;
    }

但是相同的代码在Junit 5测试代码中返回空列表(ServiceLoader返回null)。如何使用Junit
5测试服务提供者模块。或者Junit是否有其他选择,允许我们创建在模块信息中声明“使用myspi.MyProvider”并可以与getMyProviders正常工作的测试模块(模块化测试API)。
)?


问题答案:

解决了!

我已经将Jun​​it从类路径删除到模块路径,还删除了所有Junit 4兼容性东西,例如RunWith()等,并进行了纯Junit 5测试。

我添加了一个module-info.java(Junit 5不需要打开模块,尽管书中讲的相反)

在对测试进行模块化之后,我发现它仍然没有执行ServiceLoader的东西。然后,我自己开始寻找故障。

我找到了!可以在基本模块中运行ServiceLoader东西,因为基本模块引用导出的myProvider.jar,而后者又访问了同一目录中的myProvider-
config.properties文件。没有此配置文件,myProvider将无法正常工作。

另一方面,有问题的测试模块引用了myProvider的eclipse项目而不是其导出的.jar文件,因此无法找到其配置文件并退出。我已经将此配置文件从Netbeans移至Eclipse,只需将其复制到同一目录中即可。因此缺少配置文件是问题所在。

更改项目设置,我可以毫无问题地运行测试。

我要感谢所有答复的人员。



 类似资料:
  • 问题内容: 这是我的基本模块,需要myspi包中定义的接口的实现。各种提供程序都可以提供MyProvider实现。基本模块通过myspi.MyProvider接口实现使用它们。 这是我的示例实现模块,该模块为MyProvider实现提供MyProviderImpl 当我在基本模块中加载实现时,所有这些工作正常 但是相同的代码在Junit 5测试代码中返回空列表(ServiceLoader返回nul

  • 我很难从各种渠道获得关于如何修改我现有的ASP.NET应用程序(非MVC,如果这很重要的话——基于基于表单的认证的旧web表单)的明确指导,以接受通过SAML的单点登录用户。具体来说,我们希望连接到俄克拉荷马州。我已经让OpenID Connect与Okta一起工作,但是我们的客户特别希望通过Okta使用SAML。我们也希望在未来通过SAML支持其他身份提供者。 我已经在Okta中设置了应用程序,

  • 我构建了一个Angular,它有自己的服务和组件: 和: 然后我将其导入我的: 当我将注入时,出现错误: 应用程序组件中的错误:文件服务没有提供程序 来自Angular文档: 当我们导入模块时,Angular 会将模块的服务提供程序(其提供程序列表的内容)添加到应用程序根注入器中。 这使得应用程序中知道提供者的查找标记的每个类都可以看到提供者。 我做这件事缺少什么?

  • 问题内容: 我正在构建一个快速的Web搜寻器,并且需要具有多线程DNS解析,因此我选择了一个名为dnsjava的多线程DNS服务提供商。不幸的是,我不知道如何替换默认的DNS服务提供商。 我查看了dnsjava 的README文件,但说明不是很完整。 替换标准的Java DNS功能: 从Java 1.4开始,可以在运行时加载服务提供者。要加载dnsjava服务提供者,请按照上述说明进行构建并设置系

  • 我必须在具有OpenSAML2.5.1(旧版本的cas)的代码库上实现SAML2.0,不幸的是,我无法使用spring saml安全扩展(它使用了新版本的opensaml)。我已经研究了spring扩展如何处理授权请求/响应,并在一定程度上对其进行了反向工程。我能够从sp呼叫idp(sso圈)并尝试登录,但在提交时出现500个错误:原因:无法进行单点登录或联合。 是否有任何示例java opens

  • 我试着在谷歌云测试实验室运行我的测试。我的单元测试和浓缩咖啡测试顺利通过。 但对于一些需要Google Apis的浓缩咖啡测试,例如地图和地点,我的测试失败了。 更详细地说,当我在谷歌云测试实验室运行这段代码时,它失败并返回“没有可用的播放服务!”: 要启动云测试,我使用以下命令: gcloud beta测试android run--app app/build/输出/apk/app-debug.a