unittest - junit和Mockito。测试addNewAccount到数据库,f我需要删除/删除一个帐户

时间:2018-04-11 19:29:39

标签: java junit mockito

我已经写过单元测试 - junit与Mockito库来测试任何方法,他们将数据库保存到新帐户 - addNewAccount方法。 我想问 - 如果我需要添加一个方法或者什么以及如何 - 删除/删除一个帐户,添加了谁。请告诉我我能做什么。 我的单元测试是:

 @Test
        public void shouldSaveaAccountToDb() {
            Account acc = new Account();
            acc.setUser(this.user);
            acc.setEmail(this.mail);
            String account = this.accountController.addNewAccount(this.user, this.mail);
            verify(this.accountRepepetytory)).save(Mockito.refEq(acc, new String[0]));
            Assert.assertThat(account, CoreMatchers.is("Account"));
        }

我还想添加一个带空值的case并测试null和空字符串。如果您有任何想法添加测试用例请告诉我。

非常感谢你的帮助。我改进了我的考试。 我还有一个使用null值进行测试的方法。这是方法。

   @Test
    public void SaveToDatabaseWithNull() {
        Account acc = new Account();
        String mail = null;
        user.setMail((String)mail);
        user.setUser(this.user);
        String account = this.accountController.addNewAccount(this.user, (String)mail);
        verify(this.accountRepetytory)).save(Mockito.refEq(uaccount, new String[0]));
        Assert.assertThataccountCoreMatchers.is("Account"));
    }

我还想问一下,在这些测试中是否有必要删除一些值,添加一个删除帐户的方法。如果我在一个方法中创建一个帐户,我是否必须以某种方式删除它?在后面的方法中使用null值正确测试。

1 个答案:

答案 0 :(得分:1)

在你的代码中,你有一些弱点会让你测试英语并且难以理解:

每种测试方法都应仅验证一个期望值。

您的测试会验证两件事:

  1. 代码创建了一个类Account的对象,该对象等于通过Account equals()类的"Account"类实现在测试方法中创建的对象。

  2. 该方法的返回值是一个内容为Mockito.refEq()的字符串 问题是测试没有解释为什么你期望那个字符串。

  3. 所以基本上你应该有单独的方法来验证这两种行为,以便更好地描述测试方法名称中测试的行为。

    减少对不相关代码的依赖。

    equals依赖于Account类中null方法的(正确)实现。如果一个帐户获得了不允许ArgumentCaptor的更多属性,那么这个方法实际上没有实施或者(甚至更糟)可能需要额外的配置。

    更好的方法是使用@Test public void shouldPassAnAccountObjectWithNameAndEmailSetToDB() { ArgumentCaptor<Account> accountCaptor = ArgumentCaptor.forClass( Account.class); this.accountController.addNewAccount( this.user, this.mail); verify(this.accountRepepetytory)) .save( accountCaptor.capture()); Assert.assertThat( "user", accountCaptor.getValue().getUser(), CoreMatchers.is(this.user)); Assert.assertThat( "email", accountCaptor.getValue().getEmail(), CoreMatchers.is(this.email)); } 并验证捕获对象的属性:

    import webbrowser
    url = "<your-local-Ip-address>:8080/"