当前位置: 首页 > 知识库问答 >
问题:

如何在Java中模拟LdapTemboard并获得完整的代码覆盖

傅翰池
2023-03-14

我正在尝试使用Mockito对一个非常简单的junit测试进行全面的报道,我要出击了。我的免责声明是,我对Mockito是新手,尽管我试图做的事情看起来很简单。

请注意,我的junit测试通过了,只是覆盖还不完整。当测试运行时,返回true(用户列表不为空)的方法部分没有运行/覆盖。

我的问题是...

>

你能简单地模拟ldap数据吗?

非常感谢您提供的任何见解。

下面是正在测试的方法(类名=LdapRepository)。。。

public Mono<Boolean> ldapTemplateQuery(Email email) {

        Mono<Boolean> blockingWrapper = Mono.fromCallable(() -> {
            List<LdapUser> users = ldapTemplate.find(query().where("cn").is(email.address()), LdapUser.class);
            if (users.isEmpty()) {
                return false;
            } else {
                return true;
            }
        }).onErrorResume(
                original -> Mono.error(new UserNotFoundException("User not found for email " + email.address())));
        return blockingWrapper.subscribeOn(Schedulers.elastic());
    } 

这是junit课程。。。

@RunWith(MockitoJUnitRunner.class)
public class LdapUserRepositoryMockTest {

    private @InjectMocks LdapUserRepository ldapUserRepository;

    @Mock
    private LdapTemplate ldapTemplate;

    Email email = new Email("abcd@xyz.com");
    User user = new User(email);

    static final String password = "VGVzdEAxMjM=";
    
    @Test
    public void ldapTemplateQueryTest() {

        LdapUser ldapUser = new LdapUser(user, password.toCharArray());
        List<LdapUser> users = new ArrayList<>();
        users.add(ldapUser);

        lenient().when(ldapTemplate.find(query().where(Mockito.anyString()).is(Mockito.anyString()), LdapUser.class)).thenReturn(users);
        
        Mono<Boolean> locked = ldapUserRepository.ldapTemplateQuery(email);
        StepVerifier.create(locked).expectNext(false).verifyComplete();
    }

这是报道结果的截图。。。

共有1个答案

许典
2023-03-14

在别人的帮助下,我终于得到了答案。正如你将在下面看到的,这是对宽大声明的一个相当小的改变。

希望这将是一个帮助某人的过程。

@RunWith(MockitoJUnitRunner.class)
public class LdapUserRepositoryMockTest {

    private @InjectMocks LdapUserRepository ldapUserRepository;

    @Mock
    private LdapTemplate ldapTemplateMock;

    Email email = new Email("abcd@xyz.com");
    User user = new User(email);

    static final String PASSWORD = "VGVzdEAxMjM=";

    @Test
    public void ldapTemplateQueryTest() {

        LdapUser ldapUser = new LdapUser(user, PASSWORD.toCharArray());
        List<LdapUser> users = new ArrayList<>();
        users.add(ldapUser);
 
        lenient()
                .when(ldapTemplateMock.find(Mockito.any(), Mockito.eq(LdapUser.class)))
                .thenReturn(users);

        Mono<Boolean> locked = ldapUserRepository.checkIfAccountLocked(email);
        StepVerifier.create(locked).expectNext(true).verifyComplete();
    }
}
 类似资料:
  • 问题内容: 我是Java新手,正在使用DrJava IDE进行测试。我有以下分区49700/40000,它显示1.0而不是1.2425。 我做错了什么吗? 问题答案: 试试,这代替: 如果两个操作数都是整数,则结果将是将被截断的整数,然后将其强制转换为双精度型。相反,如果其中一个操作数是双精度数,则结果将是双精度数。

  • 我不能得到100%的代码覆盖率,因为我不能测试Golang的致命性。 我发现了一些问答,包括这一个,但我迷失了,因为帖子的答案是矛盾的。一方面,可以检查Golang中的代码覆盖率。另一方面,有些人主张忽略对等的测试,导致代码覆盖率低于。 尝试 根据这个定义,我的代码中有多个片段可能引发恐慌,而应该使用。

  • 问题内容: 我正在搜索rt.jar的源代码以获取Oracle JRE / JDK 6 Update22。交付随附的src.zip并不包含所有源代码,例如sun。*(例如sun.reflect.Reflection)。 )包丢失。 在哪里可以获得完整的src.zip? 问题答案: 这个答案写于2010年,当时世界大不相同。如果仅需要JRE类的源代码,请在JDK构建中使用JRE-包括的src.zip文

  • 在过去的几天里做了一些阅读后,我已经取得了一些进展,下面是我想出的代码: 主要活动: HTTPRequest 没有错误,一切运行正常,但问题是-我已经建立了这个代码作为一个测试,如果我可以登录我试图登录的网站,但我无法从中获得任何信息。在我按下按钮后,似乎发生了什么事情,我发送到用户界面线程的输入流给了我这个:“java.io.BufferedInputStream@afe19b8”,每次按下按钮

  • 问题内容: 我正在使用Cobertura进行代码覆盖率分析。如果我在詹金斯(Jenkins)中运行构建,则覆盖范围结果中将包含其中的类,但覆盖率为 0% 。如果我在工作区(Eclipse)中运行代码覆盖率,则覆盖率会更高。包装的覆盖范围还可以。我错过了一些配置吗? 我的项目结构如下: 我的cobertura配置在POM文件中: 问题答案: 生成的代码不应进行测试,并且不应在代码覆盖率指标中使用。原

  • 问题内容: 我想实现一个Java方法,该方法以URL作为输入并将整个网页(包括CSS,图像,JS(所有相关资源))存储在磁盘上。我已经使用Jsoup html解析器来获取html页面。现在,我想实现的唯一选择是使用jsoup获取页面,现在解析html内容并将相对路径转换为绝对路径,然后再次请求获取javascript,图像等并将其保存在磁盘上。我还阅读了有关HTML清洁器,htmlunit解析器的