unittest - 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"));
}

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


谢谢你非常匹配的帮助。我改进了我的测试。 我还有一个用空值进行测试的方法。这是方法。

@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. 该代码创建了一个类Account的对象,该对象等于通过equals()Account类实现在测试方法中创建的对象。

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

因此,基本上您应该使用单独的方法来验证任一行为,以便在测试方法名称中更好地描述测试的行为。

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

Mockito.refEq()依赖于类Accountequals方法的(正确)实现。没有确切的判断,这种方法实际上已经实现,或者(更糟糕的是)如果帐户获得更多不允许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));
}

相关内容

  • 没有找到相关文章

最新更新