小编RIT*_*AVI的帖子

如何使用Mockito对链接的方法调用进行单元测试

我正在研究一个使用JIRA的REST Client的J2EE项目。该客户端返回一个Jira issue对象。一些领域的Issue阶级是keyselfidsummary,等等self领域在这里基本上是一个URI。
例如,http://jira.company.com/rest/api/2.0/issue/12345 我有一个用例,其中我必须从上面指定的URI中检索主机。

我可以用类似的方法做到这一点issue.getSelf().getHost()
issue.getSelf()返回“ URI”类型的对象并获取主机,我可以简单地使用类getHost()提供的方法,URI该类以String格式返回主机URL 。

一切正常。我在使用Mockito进行这段代码的单元测试时遇到问题。我不知道如何模拟链接的方法调用。

我有以下代码片段。

private static final String JIRA_HOST = "jira.company.com";
@Mock private com.atlassian.jira.rest.client.api.domain.Issue mockIssue;

@Before
    public void setup() {
        when(mockIssue.getSelf().getHost()).thenReturn(JIRA_HOST);
    }
Run Code Online (Sandbox Code Playgroud)

在这里,我得到一个Null Pointer Exception

经过大量研究之后,我才知道必须使用@Mock(answer = Answers.RETURNS_DEEP_STUBS) private com.atlassian.jira.rest.client.api.domain.Issue mockIssue;
但这也给我一个启示Null Pointer Exception

有人可以告诉我如何模拟链接的方法调用。

java junit mockito

6
推荐指数
1
解决办法
6291
查看次数

如何使用Java 8 Streams和Lambdas迭代嵌套for循环引用父元素?

我有下面的代码.

public static ModuleKey getDeployableModuleFromModulesList(List<Module> modules) {
        ModuleKey deployableModuleKey = null;
        for(Module module : modules) {
            List<Artifact> artifacts = module.getArtifacts();
            for(Artifact artifact : artifacts) {
                if(artifact.getType().equals("ear")) {
                    return module.getKey();
                } else if(!artifact.getType().equals("ear")) {
                    if(artifact.getType().equals("war")) {
                        deployableModuleKey = module.getKey();
                    } 
                }
            }
        }
        return deployableModuleKey;
    }
Run Code Online (Sandbox Code Playgroud)

此代码使用key ='war'找到第一个'deployableModuleKey',或者使用key ='war'找到最后一个'deployableModuleKey'.我想使用Java 8 Streams和Lambdas实现与上面相同的功能.

到目前为止,我所尝试的是:

modules.stream().flatMap(e -> e.getArtifacts().stream())
  .filter(e -> e.getType().equals("ear")).findFirst()
  .orElseGet(() -> modules.stream().flatMap(e -> e.getArtifacts().stream())
  .filter(e -> e.getType().equals("war")).reduce((a, b) -> b).orElse(null));
Run Code Online (Sandbox Code Playgroud)

上面的代码片段将返回一个类型的对象Artifact而不是Module.我想获得工件与条件匹配的模块.一旦找到模块,我就可以通过这样做来返回密钥module.getKey().要做到这一点,我想知道我们如何引用父for循环的元素.

我不确定我的Java 8代码是否完全正确.
在这方面有人可以帮助我吗?

lambda java-8 java-stream

5
推荐指数
1
解决办法
813
查看次数

具有不同数量查询参数的两种 GET 方法:REST

我有一个 Rest 端点类,如下所示:

@Path("/sports")
public interface SportsEndpoint {

    @GET
    List<Player> getPlayersOfSports(@QueryParam("sportId") String sportId, @QueryParam("sportName") String sportName);


    @GET
    List<Player> getPlayersOfSports(@QueryParam("sportId") String sportId, @QueryParam("sportName") String sportName, @QueryParam("country") String country);

}
Run Code Online (Sandbox Code Playgroud)

如您所见,我有两种GET方法几乎具有相同的签名,但第二种方法需要额外的QueryParam.

我尝试使用 url 访问这些端点:

http://localhost:8080/rest/api/sports?sportId=100&sportName=badminton http://localhost:8080/rest/api/sports?sportId=100&sportName=badminton&country=japan

这两个 url 都解析为使用第一个方法签名。理想情况下,我期望对于第一个 url,将调用第一个方法签名,而对于第二个 url,将调用第二个方法(具有 3 个查询参数的方法)。
但看起来在这两种情况下,第一种方法都被调用了。

我知道 Rest 资源由路径而不是查询参数唯一标识。但是,即使查询参数的数量不同,其余端点也不会被唯一标识,这也是真的吗?
有人可以指出我在设计rest api端点时可以理解多态性的一些规范/文章/文档吗?

仅供参考:我正在使用 RestEasy。

java rest resteasy

4
推荐指数
1
解决办法
3024
查看次数

如何使用Email :: Send :: SMTP :: Gmail向多个收件人发送电子邮件

我正在尝试使用Email :: Send :: SMTP :: Gmail编写一个简单的perl脚本来发送电子邮件.

以下是我到目前为止编写的脚本.

   use strict;
   use warnings;

   use Email::Send::SMTP::Gmail;

   my $mail=Email::Send::SMTP::Gmail->new( -smtp=>'smtp.gmail.com',
                                       -login=>'abc@gmail.com',
                                       -pass=>'12345',
                   -port=>587,
                   -verbose=>1,
                   -debug=>1);

   $mail->send(-to=>'pqr@gmail.com', -subject=>'Hello!',     -body=>'Just testing it', -verbose=>1, -debug=>1);

   $mail->bye;
Run Code Online (Sandbox Code Playgroud)

这个脚本工作正常.如何将此电子邮件发送给多个人(即"收件人"字段中的多个电子邮件ID).我尝试过使用:

$mail->send(-to=>['pqr@gmail.com', 'xyz@gmail.com'], -subject=>'Hello!',     -body=>'Just testing it', -verbose=>1, -debug=>1);
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

Net::SMTPS=GLOB(0x23b77a8)>>> RCPT TO:<ARRAY(0x1ee5e78)>
Net::SMTPS=GLOB(0x23b77a8)<<< 553 5.1.2 The address specified is not a  valid RFC-5321 address. w78sm722980qka.25 - gsmtp
Run Code Online (Sandbox Code Playgroud)

email perl

0
推荐指数
1
解决办法
172
查看次数

标签 统计

java ×2

email ×1

java-8 ×1

java-stream ×1

junit ×1

lambda ×1

mockito ×1

perl ×1

rest ×1

resteasy ×1